- $string = spam_uri_pickup_preprocess($string);
-
- $array = uri_pickup($string);
-
- // Area elevation for '(especially external)link' intension
- if (! empty($array)) {
- // Anchor tags by preg_match_all()
- // [OK] <a href="http://nasty.example.com">visit http://nasty.example.com/</a>
- // [OK] <a href=\'http://nasty.example.com/\' >discount foobar</a>
- // [NG] <a href="http://ng.example.com">visit http://ng.example.com _not_ended_
- // [NG] <a href= >Good site!</a> <a href= "#" >test</a>
- $areas = array();
- preg_match_all('#<a\b[^>]*href[^>]*>.*?</a\b[^>]*(>)#i',
- $string, $areas, PREG_SET_ORDER | PREG_OFFSET_CAPTURE);
- //var_dump(recursive_map('htmlspecialchars', $areas));
- foreach(array_keys($areas) as $area) {
- $areas[$area] = array(
- $areas[$area][0][1], // Area start (<a href>)
- $areas[$area][1][1], // Area end (</a>)
- );
- }
- area_measure($areas, $array);
-
- // phpBB's "BBCode" by preg_match_all()
- // [url]http://nasty.example.com/[/url]
- // [link]http://nasty.example.com/[/link]
- // [url=http://nasty.example.com]visit http://nasty.example.com/[/url]
- // [link http://nasty.example.com/]buy something[/link]
- // ?? [url=][/url]
- $areas = array();
- preg_match_all('#\[(url|link)\b[^\]]*\].*?\[/\1\b[^\]]*(\])#i',
- $string, $areas, PREG_SET_ORDER | PREG_OFFSET_CAPTURE);
- //var_dump(recursive_map('htmlspecialchars', $areas));
- foreach(array_keys($areas) as $area) {
- $areas[$area] = array(
- $areas[$area][0][1], // Area start ([url])
- $areas[$area][2][1], // Area end ([/url])
- );
+ static $regexes;
+
+ if ($list === NULL) {
+ $regexes = NULL; // Unset
+ return array();
+ }
+
+ if (! isset($regexes)) {
+ $regexes = array();
+ if (file_exists(SPAM_INI_FILE)) {
+ $blocklist = array();
+
+ include(SPAM_INI_FILE);
+ // $blocklist['list'] = array(
+ // //'goodhost' => FALSE;
+ // 'badhost' => TRUE;
+ // );
+ // $blocklist['badhost'] = array(
+ // '*.blogspot.com', // Blog services's subdomains (only)
+ // 'IANA-examples' => '#^(?:.*\.)?example\.(?:com|net|org)$#',
+ // );
+
+ foreach(array(
+ 'pre',
+ 'list',
+ ) as $special) {
+
+ if (! isset($blocklist[$special])) continue;
+
+ $regexes[$special] = $blocklist[$special];
+
+ foreach(array_keys($blocklist[$special]) as $_list) {
+ if (! isset($blocklist[$_list])) continue;
+
+ foreach ($blocklist[$_list] as $key => $value) {
+ if (is_array($value)) {
+ $regexes[$_list][$key] = array();
+ foreach($value as $_key => $_value) {
+ get_blocklist_add($regexes[$_list][$key], $_key, $_value);
+ }
+ } else {
+ get_blocklist_add($regexes[$_list], $key, $value);
+ }
+ }
+
+ unset($blocklist[$_list]);
+ }
+ }