我在我的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