使用preg_replace对文件中的单词不起作用

Ron*_*Ron 0 php preg-replace

这是我的来源

 $Message = $_GET["message"];
 $Username = htmlspecialchars($_GET["username"]);
 $unix = ($_GET["time"]);
 include 'mcheck.php'; 
$file1 = file_get_contents('filter.txt');
$bad_words = explode(PHP_EOL, $file1);
$compare = explode('', $Message);
foreach ($bad_words as $bad_word)
  $Message = preg_replace('/\b('.$bad_word.')\b/i', "***", $Message);
  echo $Message;
Run Code Online (Sandbox Code Playgroud)

说坏话就是 go

$Message = I Like to go to school

我想要它 echo I Like to *** to school

但我得到了

***I***Like***To******to***school***
Run Code Online (Sandbox Code Playgroud)

我不知道问题是什么

Jas*_*ary 6

根据输出,您的数组中可能有一个空元素.所以它最终匹配一个单词边界(\b).

要确认这一点,请添加以下内容以调试代码:

$bad_words = explode(PHP_EOL, $file1);
print_r($bad_words);
Run Code Online (Sandbox Code Playgroud)

顺便说一句,循环每个坏词都是浪费.一旦你解决了上述问题,我建议使用单个正则表达式进行修改.

例如:

\b(one|two|three)\b
Run Code Online (Sandbox Code Playgroud)