用于智能审查器的 PHP/Regex [重复]
Posted
技术标签:
【中文标题】用于智能审查器的 PHP/Regex [重复]【英文标题】:PHP/Regex for a smart censor [duplicate] 【发布时间】:2015-04-11 02:09:29 【问题描述】:我正在寻找在 php 中使用 Regex 作为留言板的智能审查器。基本上,我有一个坏词数组(在正则表达式中)以及每个要使用的替换。我检测字母之间的空格以防止绕过审查员,但我挂断了有人有任何坏词的字母被 html 标记包裹。因此,如果“shit”被阻止,我可以用任意数量的空格捕捉“s h i t”,但如果有人这样做sh<b>i</b>t
(i 用粗体标签包裹),它就会通过。这显然不可能发生,所以我被难住了。
这是我目前所拥有的:
$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,这会在返回时破坏整个留言板帖子。提供的任何帮助或见解将不胜感激!
【问题讨论】:
在你能用英语定义你的规则之前,不要用正则表达式来考虑这个。您将具体处理哪些案件?用一个代替字母 I 怎么样?要么 !为我?美元换 S 怎么样?字母之间的标点符号怎么样,比如 MAS*H?用英文写出来,然后你就可以想代码了。 【参考方案1】:事实是 - 无论你添加什么来抓住脏话,如果有人想找到解决方法,他们会的。你越是尝试阻止它,你就会得到更多的误报。
即使你现在的方法,如果有人输入“Push it to github”,你将把它变成“Pus*** to github”。
老实说,最好的办法是抓住明显的内容,并有办法将帖子标记为淫秽内容。
在这个网站上可以查看的一些很好的资源是:
How do you implement a good profanity filter?
和
"bad words" filter
【讨论】:
以上是关于用于智能审查器的 PHP/Regex [重复]的主要内容,如果未能解决你的问题,请参考以下文章