我遇到了这个坏词防止代码的问题。如果我将其保留在下面,代码将说"不允许使用bad1这个词"无论我输入什么。 如果我使用$ entry变量删除下面的第4行,那么代码会让所有内容都通过,甚至是bad1。
我们的目标是匹配像' are'这样的词,但不匹配' care'
if (isset($_POST['text'])) {
// delete the line below in your code
$entry = "notbad1word bad1 bad notbad1.";
$disallowedWords = array(
'bad1',
'bad2',
);
foreach ($disallowedWords as $word)
{ // use $_POST['text'] instead of $entry
preg_match("#\b". $word ."\b#", $entry, $matches);
if(!empty($matches))
die("The word " . $word . " is not allowed. <b><a
href=\"javascript:history.back();\">Go Back</a></b>");
}
}
下面的代码工作正常,是我最初接受的答案(我可以坚持这一点,但它不会为内部匹配做任何事情,我不认为)。无论如何,如果没有快速解决方案,我将满足于我最初接受的以下答案:
if (isset($_POST['text'])) {
// Words not allowed
$disallowedWords = array(
'bad1',
'bad2',
);
$pattern = sprintf('/(%s)/i', implode('|',$disallowedWords));
$subject = $_POST['text'];
if (preg_match($pattern, $subject, $token)) {
die(sprintf("The word '%s' is not allowed. <b><a
href=\"javascript:history.back();\">Go Back</a></b>\n", $token[1]));
}
}