我正在用PHP编写一个badword过滤器。
我有一个数组中的坏词列表,方法cleanse_text()写成如下:
public static function cleanse_text($originalstring){
if (!self::$is_sorted) self::doSort();
return str_ireplace(self::$badwords, '****', $originalstring);
}
这对于完全匹配很简单,但是我还要审查那些伪装成'ab * d'的词,其中'abcd'是一个坏词。事实证明这有点困难。
以下是我的问题:
是一个值得打扰的坏词过滤器(它是专业人士的网站,因此需要一定的最低限度 - 我会想到的)
尝试捕捉像'f * ck'这样的明显工作是否值得喧嚣 - 或者我是否应该尝试过滤掉那些。
有没有更好的方法来编写上面的cleanse_text()方法?
答案 0 :(得分:13)
我绝对不会打扰它。
这是专业人士的网站,因此您可以假设他们会采取适当的行动。一些节制和执行规则将使任何人排队。以Stack Overflow为例。即使没有社区审核工具,人们也可能会受到适当的压力。
它会失败。会有太多的误报(“clbuttic”),并且制作包含所有可能的咒骂词的列表将无法维持。替换某些字母(例如:f*ck
)使其具有同样的冒犯性。删除这个词完全破坏了意义,这是误报的一个大问题。
考虑一下关于驴和鸟的讨论。这完全是关于驴,乳房,鲣鸟和公鸡。
答案 1 :(得分:1)
如果它是专业人士的网站,那么请不要打扰。你不会在第一时间看到太多的诅咒,当你这样做时,很可能是喜剧效果或类似的。那些在不成熟的庄园里发誓的人会因为给每个人留下不好的印象而受到惩罚。 (那些完全过度的人应该由主持人处理,所以这不应该是一个问题。)
当你尝试实现一个糟糕的单词过滤器时会发生什么?你最终会审查完全善意使用咒骂词,并且在很多情况下,你还会审查那些不是咒骂词而且足够类似于过滤器捕获的单词。 (它被称为Scunthorpe problem,正如@deceze在评论中提到的那样。)另外,除非你全力以赴,否则它将很容易被规避。 总而言之,我认为这不值得付出努力。
以Stack Overflow为例。它没有坏词过滤器,它做得很好 - 我没有听说过这种事情有任何问题。
答案 2 :(得分:1)
好的,这是一个不同的想法:
我不知道你要过滤哪些内容,但我只是假设它是一个评论系统,因为这仍然适用于其他任何内容。
您可能拥有某种管理界面。如果每次有人在评论中包含可能的“坏词”,它会在所述界面中为您留下一个注释。或者每天向您发送一封电子邮件,其中包含您网站上出现的所有亵渎版本。每个列表旁边都可能有链接,当点击时,会自动将过滤器应用于该评论/帖子/任何内容,或删除它,或任何你想要的。然后你可以只看一眼报告,点击一两次来清理网站,然后完成它。
您可能认为这不会扩展。它可能不会。但是,如果您的网站没有获得大量流量,您甚至可能每天都无法获得报告。或者每周。您可能根本不需要进行干预。没有列表,没有考虑每一个可能令人反感的词和所有可能的拼写,没有误报。
它可以工作。
答案 3 :(得分:0)
无论如何,这都是8u11 $#1 +。只要发布一个人类可读的规则,让人类举出令人反感的举动并禁止违法者。
答案 4 :(得分:-1)
在很多情况下,您希望实现此功能。它会100%正确/安全/失败吗?当然不是,但请告诉我是什么!
如果您将OPs请求(自动标记帖子/用户输入)与组合为一般用户报告此功能,那么您就拥有一个非常强大的系统。大多数大型企业和商业实体都使用这种“加倍”系统,它结合了自动标记输入的“管理员工评论”和普通用户还报告任何已经下滑的内容的能力。雷达。
function spam_found($full_string){
$spam = array('100%', '100 %', '110%', '110 %', 'free');
$i = 0;
foreach ($spam as $spamword) {
if (strrpos($full_string, $spamword)) {
$i++;
}
}
if($i > 0){
return true;
}else{
return false;
}
}
这只是我们公司使用的一个非常基本的功能“模板”(在MVC环境中使用,这实际上是一个从控制器调用的辅助函数,我们根据输入的类型有很多这样的函数)。这可以很容易地适应各种情况,例如,只有在找到3个垃圾邮件单词时才返回true。
例如,在澳大利亚,如果您在宣传某份工作,则指明该工作仅针对特定性别是违法的。这是对的,如果你正在寻找一个在脱衣舞俱乐部工作的女孩,你 不允许说“只找女孩”。如果发现某个网站有这样的广告位置(即在Facebook上),则该网站(不是广告商/发布广告的人)对任何可能的刑事或民事指控/诉讼负责。
在上述案例中,Facebook对澳大利亚广告中提到的“男性,女性,男性,女孩等”字样进行“垃圾邮件检查”是完全合理的。