用于智能审查器的 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 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

来自应用程序的 iOS 上的 iTunes 应用程序审查 [重复]

结对审查

利用Azure内容审查器审查违规内容(上)

用于应用审查的 iPad Pro 屏幕截图大小

Jenkins+SonarQube代码审查

配置sonarjenkins进行持续审查