用于智能审查的PHP/Regex

用于智能审查的PHP/Regex,php,regex,Php,Regex,我正在寻找建立一个智能审查在PHP使用正则表达式的留言板。基本上,我有一个包含坏单词的数组(在正则表达式中)以及用于每个坏单词的替换。我检测字母之间的空格以防止绕过审查,但我发现有人用HTML标记包装了任何坏单词的字母。所以,如果“shit”被阻止,我可以用任意数量的空格捕捉“shhit”,但如果有人做了shit(我用粗体标记包装),它就可以通过。这显然不可能发生,所以我在这里被难住了 以下是我到目前为止的情况: $bad_words = array('/s\s*h\s*i\s*t/i'=>

我正在寻找建立一个智能审查在PHP使用正则表达式的留言板。基本上,我有一个包含坏单词的数组(在正则表达式中)以及用于每个坏单词的替换。我检测字母之间的空格以防止绕过审查,但我发现有人用HTML标记包装了任何坏单词的字母。所以,如果“shit”被阻止,我可以用任意数量的空格捕捉“shhit”,但如果有人做了
shit
(我用粗体标记包装),它就可以通过。这显然不可能发生,所以我在这里被难住了

以下是我到目前为止的情况:

$bad_words = array('/s\s*h\s*i\s*t/i'=>'s***');
$new_string = preg_replace(array_keys($bad_words), array_values($bad_words), $string);
return $new_string;

我曾考虑过用strip_tags()包装$string,但由于其余的帖子内容(不仅仅是被追捧的坏话)可能包含HTML,这将在返回时破坏整个留言板帖子。如能提供任何帮助或见解,将不胜感激

事实是——不管你加了什么来捕捉咒骂,如果有人想找到一种绕过咒骂的方法,他们会的。你越是努力阻止它,你就会得到更多的误报

即使是你现在的方法,如果有人输入“Push it to github”,你也会把它变成“Pus***to github”

老实说,你最好的办法就是抓住那些显而易见的,并且有办法将一篇文章标记为淫秽

本网站上的一些好资源包括:


在你能用英语定义规则之前,不要用正则表达式来考虑这个问题。你到底要处理哪些案件?用一个代替字母I怎么样?或为了我?S美元怎么样?字母之间的标点符号怎么样,比如MAS*H?用英语写出来,然后你就可以思考代码了。