在 PHP 中的 preg_match_all 期间出错
Error during a preg_match_all in PHP
我需要检查一个字符串是否包含特定的单词。
我的代码如下:
// Get index.html source
$html = file_get_contents('extract/index.html');
// Bad words checker
$badWords = array("iframe", "alert");
$matches = array();
$matchFound = preg_match_all("/\b(" . implode($badWords,"|") . ")\b/i", $html, $matches);
if ($matchFound) {
$words = array_unique($matches[0]);
foreach($words as $word) {
$results[] = array('Error' => "Keyword found : ". $word);
}
}
else {
$results[] = array('Success' => "No keywords found.");
}
每次我想执行这个时,我都会收到以下警告:
Warning: preg_match_all(): Unknown modifier 'w' in /home/public_html/upload.php on line 131
第 131 行:
$matchFound = preg_match_all("/\b(" . implode($badWords,"|") . ")\b/i", $html, $matches);
你知道为什么吗?
谢谢。
如果其中一个坏词是'/w',它可能会导致这个问题。下面的示例演示了这一点:
$html = 'foobar';
// Bad words checker
$badWords = array("iframe", "alert", '/w');
$matches = array();
$matchFound = preg_match_all("/\b(" . implode($badWords,"|") . ")\b/i", $html, $matches);
'/w' 的变体,例如 'foo/wbar' 或 '/wfoo' 也会导致此问题。检查坏词并删除有问题的词。
编辑:另一种解决方案是使用不同的分隔符,如#。像这样:
$matchFound = preg_match_all("#\b(" . implode($badWords,"|") . ")\b#i", $html, $matches);
我需要检查一个字符串是否包含特定的单词。
我的代码如下:
// Get index.html source
$html = file_get_contents('extract/index.html');
// Bad words checker
$badWords = array("iframe", "alert");
$matches = array();
$matchFound = preg_match_all("/\b(" . implode($badWords,"|") . ")\b/i", $html, $matches);
if ($matchFound) {
$words = array_unique($matches[0]);
foreach($words as $word) {
$results[] = array('Error' => "Keyword found : ". $word);
}
}
else {
$results[] = array('Success' => "No keywords found.");
}
每次我想执行这个时,我都会收到以下警告:
Warning: preg_match_all(): Unknown modifier 'w' in /home/public_html/upload.php on line 131
第 131 行:
$matchFound = preg_match_all("/\b(" . implode($badWords,"|") . ")\b/i", $html, $matches);
你知道为什么吗?
谢谢。
如果其中一个坏词是'/w',它可能会导致这个问题。下面的示例演示了这一点:
$html = 'foobar';
// Bad words checker
$badWords = array("iframe", "alert", '/w');
$matches = array();
$matchFound = preg_match_all("/\b(" . implode($badWords,"|") . ")\b/i", $html, $matches);
'/w' 的变体,例如 'foo/wbar' 或 '/wfoo' 也会导致此问题。检查坏词并删除有问题的词。
编辑:另一种解决方案是使用不同的分隔符,如#。像这样:
$matchFound = preg_match_all("#\b(" . implode($badWords,"|") . ")\b#i", $html, $matches);