我在我的PHP应用程序中实现了亵渎过滤器,该过滤器会检查用户从浏览器客户端发送的字符串是否与在MySQL中存储为表格的亵渎单词列表相对应。该表如下所示:
Word
badWord1
badWord2
etc.
PHP代码如下:
SELECT word FROM Profanities WHERE word REGEXP '$stringToCheck';
如果用户输入亵渎(或一系列亵渎),效果很好,所以:
badWord1
这是正确拾取的。
badWord1 badWord2
这也可以正确拾取。但是,这并没有解决:
badWord1badWord2
有什么方法可以将上面的字符串与表格中所有亵渎的单词进行比较?
答案 0 :(得分:1)
您正在倒退。您无需将文本中的每个单词与数据库进行比较。而是,您在全文中搜索任何不良词。您可以将所有不良词变成正则表达式,例如
$badwords = '/badword1|badword2|badword3|.../i';
然后您这样做:
if (preg_match($badwords, $text)) {
// complain about language
}
您可以使用以下方法创建正则表达式:
SELECT CONCAT('/', GROUP_CONCAT(word SEPARATOR '|'), '/') AS badwords
FROM wordlist