这是我的来源
$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)
我不知道问题是什么
根据输出,您的数组中可能有一个空元素.所以它最终匹配一个单词边界(\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)
| 归档时间: |
|
| 查看次数: |
105 次 |
| 最近记录: |