', '[url=', '[/url]', '[link=', '[/link]',), // des regexpr ou ips (sans delimiteurs) array(), array(), array() ); // repere les mots entiers entre parentheses, les regexpr entre slashes et les caracteres unicodes $spam_mots = defined('_spam_MOTS')?spam_liste_mots(_spam_MOTS):array(); foreach($spam_mots as $v) { if(preg_match(',^\((.+)\)$,', $v, $reg)) $t[1][] = '\b'.preg_quote($reg[1], '/').'\b'; elseif(preg_match(',^\/(&#)?(.*?)(;?)\/$,', $v, $reg)) $t[($reg[2] && $reg[3])?2:1][]=$reg[2]; else $t[0][] = $v; } $t[1] = count($t[1])?'/'.join('|',$t[1]).'/i':''; $t[2] = count($t[2])?'/&#(?:'.join('|',$t[2]).');/i':''; $spam_mots = defined('_spam_IPS')?spam_liste_mots(_spam_IPS):array(); array_walk($spam_mots, 'spam_walk'); $t[3] = count($spam_mots)?'/^(?:' . join('|', $spam_mots) . ')$/':''; return array($t); } function spam_walk(&$item) { $item = preg_replace(',[^\d\.\*\?\[\]\-],', '', $item); if(preg_match(',^\/(.+)\/$,', $item, $reg)) $item = '('.$reg[1].')'; else $item = str_replace(array('\*','\?','\[','\]','\-'), array('\d+','\d','[',']','-'), preg_quote($item, '/')); } // retourne un tableau de mots ou d'expressions a partir d'un texte function spam_liste_mots($texte) { include_spip('inc/filtres'); $texte = filtrer_entites(trim($texte)); $split = explode('"', $texte); $c = count($split); $split2 = array(); for($i=0; $i<$c; $i++) if (($s = trim($split[$i])) != ""){ if (($i & 1) && ($i != $c-1)) { // on touche pas au texte entre deux "" $split2[] = $s; } else { // on rassemble tous les separateurs : \s\t\n $temp = preg_replace("/[\s\t\n\r]+/", "\t", $s); $temp = str_replace("+"," ", $temp); $split2 = array_merge($split2, explode("\t", $temp)); } } return array_unique($split2); } ?>