一尘不染

您如何实现良好的亵渎过滤器?

php

我们中的许多人都需要处理用户输入,搜索查询以及输入文本可能包含亵渎或不受欢迎语言的情况。通常,这需要过滤掉。

在哪里可以找到各种语言和方言的咒骂单词的好清单?

是否有API可供包含良好列表的来源使用?还是仅使用某些参数简单地说“是的干净”或“没有这个脏”的API?

有什么好的方法可以捕获试图欺骗系统的人员,例如a $$,azz或a55?

如果您提供PHP解决方案,则可以加分。:)

编辑:回答说只是避免程序性问题的答案:

我认为,例如当用户可以使用公共图像搜索来查找添加到敏感社区池中的图片时,就可以使用这种过滤器。如果他们可以搜索“阴茎”,那么他们可能会得到很多照片。如果我们不想要这样的图片,那么虽然公认这不是万无一失的方法,但最好不要使用单词作为搜索词。首先获取单词列表是真正的问题。

因此,我实际上指的是一种找出单个令牌是否脏的方法,然后直接禁止它。我不会像完全搞笑的“长颈长颈鹿”参考文献那样阻止这种情绪。您无能为力。:)


阅读 312

收藏
2020-05-26

共1个答案

一尘不染

底线:最终,对于您实施的任何系统,绝对没有替代人为检查的(无论是同行还是其他方式)。可以随意实施一个基本工具来摆脱偷渡行为,但是对于确定的巨魔,您绝对必须使用基于非算法的方法。

一个消除匿名性并引入问责制(Stack Overflow做得很好的系统)的系统也很有用,特别是为了帮助对抗John
Gabriel的GIFT

您还询问了在哪里可以找到亵渎列表,从这里开始-
一个要检查的开源项目是Dansguardian-检查其默认亵渎列表的源代码。您还可以为代理下载其他第三方短语列表,这可能对您有所帮助。

编辑问题以进行编辑:
感谢您对要执行的操作的说明。在这种情况下,如果您只是尝试做一个简单的单词过滤器,则有两种方法可以实现。一种方法是使用您要检查的所有禁止短语创建一个长的正则表达式,而只用它进行正则表达式查找/替换。正则表达式如:

$filterRegex = "(boogers|snot|poop|shucks|argh)"

然后使用preg_match()在您的输入字符串上运行它,以全面测试匹配项,

preg_replace()将其清空。

您也可以使用数组而不是单个长的正则表达式来加载这些函数,对于长单词列表,它可能更易于管理。

您还添加了:“首先 获取单词列表是真正的问题。
”-除了以前的Dansgaurdian链接以外,您可能会发现这个方便的458个单词的.zip很有帮助。

2020-05-26