PHP在string2中找到string1,其中string1从MySQL表派生

时间:2019-06-12 23:23:32

标签: php mysql regex

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

Word
badWord1
badWord2
etc.

PHP代码如下:

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

如果用户输入亵渎(或一系列亵渎),效果很好,所以:

badWord1

这是正确拾取的。

badWord1 badWord2

这也可以正确拾取。但是,这并没有解决:

badWord1badWord2

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

1 个答案:

答案 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