我在我的PHP应用程序中实现了亵渎性过滤器,该过滤器会检查用户从浏览器客户端发送的字符串与MySQL中作为表格存储的亵渎单词的列表。该表如下所示:

Word
badWord1
badWord2
etc.


PHP代码如下:

SELECT word FROM Profanities WHERE word REGEXP '$stringToCheck';


如果用户输入亵渎行为(或一系列亵渎行为),则效果很好,因此:

badWord1


这是正确拾取。

badWord1 badWord2


这也可以正确拾取。但是,这没有被处理:

badWord1badWord2


有什么方法可以将上面的字符串与表中所有亵渎的单词进行比较?

最佳答案

你正在倒退。您无需将文本中的每个单词与数据库进行比较。而是,您在整个文本中搜索任何不良词。您可以将所有坏词变成正则表达式,例如

$badwords = '/badword1|badword2|badword3|.../i';


然后,您执行以下操作:

if (preg_match($badwords, $text)) {
    // complain about language
}


您可以使用以下方法创建正则表达式:

SELECT CONCAT('/', GROUP_CONCAT(word SEPARATOR '|'), '/') AS badwords
FROM wordlist

10-07 18:54