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

在哪里可以找到各种语言和方言的粗口?

源代码中是否有包含好的列表的api ?或者可能是一个API,用一些参数简单地说“是的,这是干净的”或“不,这是脏的”?

有什么好方法可以捕捉那些试图欺骗系统的人,比如$$、azz或a55?

如果您为PHP提供了解决方案,则会有加分。:)

编辑:回答简单地说,避免程序问题:

我认为,当用户可以使用公共图像搜索来查找添加到敏感社区池的图片时,这种过滤器是有一席之地的。如果他们可以搜索“阴茎”,那么他们可能会得到很多照片,是的。如果我们不想要照片,那么阻止这个词作为搜索词是一个很好的把关者,尽管不可否认这不是一个万无一失的方法。真正的问题是首先获得单词列表。

我指的是一种方法来判断单个令牌是否脏,然后简单地禁止它。我不会费心去阻止那种完全滑稽的“长脖子长颈鹿”的说法。你在那里什么也做不了。:)


当前回答

在我的一次面试中,面试我的公司首席技术官试用了我用Java编写的文字/网页游戏。在整个牛津英语词典的单词列表中,第一个被猜出来的单词是什么?

当然,这是英语中最脏的词。

不知怎的,我还是得到了这份工作,但我后来找到了一个亵渎词列表(和这个一样),并写了一个快速脚本来生成一个没有所有脏话的新字典(甚至不需要查看列表)。

对于你的特殊情况,我认为比较搜索和真实的单词听起来像一个单词列表的方式。另一种风格/标点符号需要更多的工作,但我怀疑用户会经常使用它,成为一个问题。

其他回答

在我的一次面试中,面试我的公司首席技术官试用了我用Java编写的文字/网页游戏。在整个牛津英语词典的单词列表中,第一个被猜出来的单词是什么?

当然,这是英语中最脏的词。

不知怎的,我还是得到了这份工作,但我后来找到了一个亵渎词列表(和这个一样),并写了一个快速脚本来生成一个没有所有脏话的新字典(甚至不需要查看列表)。

对于你的特殊情况,我认为比较搜索和真实的单词听起来像一个单词列表的方式。另一种风格/标点符号需要更多的工作,但我怀疑用户会经常使用它,成为一个问题。

我不知道有什么好的库可以做到这一点,但无论你做什么,都要确保你在让东西通过的方向上犯了错误。我曾经遇到过不允许我使用“mpassell”作为用户名的系统,因为它包含“ass”作为子字符串。这是一种疏远用户的好方法!

我同意这个主题的徒劳,但如果你必须有一个过滤器,看看宁泽涛的黄杨木:

Boxwood是一个PHP扩展,用于快速替换一段文本中的多个单词。支持区分大小写和不区分大小写的匹配。它要求它所操作的文本被编码为UTF-8。

更多细节请参见这篇博客文章:

快速多字符串替换PHP

使用Boxwood,你可以让你的搜索词列表想多长就多长——搜索和替换算法不会因为单词列表上有更多的单词而变慢。它的工作原理是建立一个包含所有搜索词的三元组,然后只扫描你的主题文本一次,遍历三元组中的元素,并将它们与文本中的字符进行比较。它支持US-ASCII和UTF-8,区分大小写或不敏感的匹配,并具有一些以英语为中心的单词边界检查逻辑。

防止攻击性用户输入的唯一方法是阻止所有用户输入。

如果你坚持允许用户输入,并且需要审核,那么就加入人工审核员。

不喜欢。

因为:

Clbuttic 亵渎不是OMG邪恶 亵渎不能被有效地定义 大多数人很可能不喜欢被“保护”免受亵渎

编辑:虽然我同意评论者所说的“审查制度是错误的”,但这不是这个答案的本质。