Изъеденая временем тема, но всеже.
Та же проблема, тот же мат, и никакого более менее рабочего способа в инете не нашел.
Пришлось самому. В первых словах скажу, я не буду искать фразы типа )(уй или з@/\уп и тому подобные. Почему? Да потому что их физически нельзя отфильтровать, так как их количество зависит от фантазии пользователей, и главное, такие символосочетания МАТОМ НЕ ЯВЛЯЮТСЯ по закону. Не стоит тратить на них время и ресурсы сервера.
Перебирая слова-маты (а их очень много) решил реализовать поиск по корням, вывел корни основных матов и состряпал небольшую функцию.
Скажу сразу, она не идеальна, но 95% мата отсеивает на стадии добавления. Имеются логи, их периодически просматриваю на предмет ложных срабатываний, вроде отсекает только мат.
Может кто и поможет доработать такой вариант антимата.
P.S. Не уверен, но за пример корней мата, меня скорее всего забанят. очень жаль. =(
PHP:
function antimat($text){
$mat= "/[COLOR=silver](бляд|*блять|баеб|боеб|выеба|отъеба|*ебать|заебать|*ебал|*ебаш|выебал|заебал|*ебан|*ебаш|переебаш|ебло|ебун|ебуч|ебосос|задрот|заеб|залуп|защекан|недоебок|недоёбок|отсоси|педрила|пизд|пидар|пидор|уеб|ахуе|охуе|*хуе|хуи|*хуй|нехуй|нахуй|похуй|захуй|членосос)[/COLOR]/i";
$newmat= array('а'=>'[аa]','е'=>'[еeё]','з'=>'[з3]','о'=>'[оo]','р'=>'[рp]','с'=>'[сc]','у'=>'[уy]','х'=>'[хx]','*'=>'\b');
$mat= strtr($mat, $newmat);
RETURN preg_match( $mat, $text );
}
$comment= 'Куча мата и т. д.';
if( antimat($comment) )
//обнаружен мат, сообщение
else
//запись комментария в базу