блокировка матов в коментах



Предыдущая | Следующая

"Хозяйке на заметку": очень часто наши коллеги интересуются, можно ли создать скрипт, который отлавливал бы матерные слова. Ну, за рациональность сей процедуры мы не поручимся, однако, вот вам один пример.

Используется сравнение, реализованное с помощью т.н. Perl-compatible Regular Expressions (Перл-совместимых регулярных выражений), для PHP. Данная штука имеет два массива, массив матерных выражений ($s1) и некоторых неприятно-ругательных ($s2 - можно обойтись и без них), ищет их в строке $StringToCheck и, если находит, вызывает функцию WakeUpAdmin, куда посылает неприятную строку с _подсветкой_:

setlocale(LC_ALL, 'ru_RU.cp1251');
/* устанавливаем русскую locale, чтобы конкретно работали функции при определении "буква-не буква", границы слов, и т.д. */

$s1=array('/((х|x)(у|y)(й|е|ё|и|я|ли\W|э))/i','/(п(и|е|ё)(з|с)д)/i', '/(\Wу?би?л(я\W|яд|ят|юдо?к))/i', '/(пид(о|а)р|п(е|и)дри)/i','/(муд(ак|о|и))/i','/((\W|по|на)(х|x)(е|e)(р|p))/i','/(з(а|о)луп(а|и))/i','/((\W|о|д|а|ь|ъ)(е|ё|и)б(а|ы|уч|усь|нут|ись))/i','/(\W(на|по)х\W)/i','/(pizd)/i','/(sosi)/i');

$s2=array('/(су(ка|чк|ки|чь))/i','/(др(оч|ачи))/i','/((\W|о|за)трах)/i','/(к(а|о)зе?ё?л)/i','/(п(е|ё)р(н|д)(и\W|иc|ы|у))/i','/(урод)/i','/(недонос)/i','/(недоумок)/i','/(придур)/i','/(дебил)/i','/(urod)/i');

$s=array_merge($s1,$s2);

$m='<FONT COLOR=#E00000><B>$1</B></FONT>';

for($i=0;$i<=count($s);$i++) $r[]=$m;

$c=preg_replace($s, $r, $StringToCheck);

if (strlen($StringToCheck)!=strlen($c)) WakeUpAdmin($c);

У данного способа ложные срабатывания почти минимальны; однако при интенсивном использовании возможен рост нагрузки на сервер.