我有问题,str_replace不能替换倒数第二个单词...第一个单词正在工作然后第二个到最后一个不在数组中工作..我尝试在“聊天”中输入消息“ducker apple banana chicken” .php?message =“然后变成这样:
输出:
"***er apple banana chicken"
badwords.txt:
duck;
apple;
banana;
chicken;
water;
chat.php
$censoredfilter = file("badwords.txt");
$censoredfilter = implode("\n", $censoredfilter);
$censoredfilter = explode(";", $censoredfilter);
$message = $_GET['message'];
for($i = 0; $i<sizeof($censoredfilter);$i++)
{
$message = str_replace($censoredfilter[$i], "***", $message);
}
答案 0 :(得分:6)
str_replace(array('things', 'go', 'here'), '', $text)
应该替换文本中找不到的任何值
$censoredfilter = file("badwords.txt");
$censoredfilter = implode("\n", $censoredfilter);
$censoredfilter = explode(";", $censoredfilter);
str_replace($censoredfilter, '***', $_GET['message']);
答案 1 :(得分:0)
错误使用内爆没有?
$censoredfilter = file_get_contents("badwords.txt");
$censoredfilter = explode(";\n", $censoredfilter);
可替换地,
$censoredfilter = file_get_contents("badwords.txt");
$censoredfilter = str_replace(array("\r", "\n"), '', $censoredfilter);
$censoredfilter = explode(";", $censoredfilter);
答案 2 :(得分:0)
要添加到@ dogmatic69的答案,我还要考虑从badwords.txt文件中删除;并将代码缩短为:
$censoredfilter = file_get_contents("badwords.txt");
$censoredfilter = explode("\n", $censoredfilter);
$message = str_replace($censoredfilter, '***', $_GET['message']);
另请注意,如果badwords.txt可由任何其他人编辑,则其文本编辑器可能会使用不同的行结尾,例如\ r \ n或\ r \ n导致脚本失败。
答案 3 :(得分:0)
如果你删除了;另一种解决方案是:
$censoredfilter = file("badwords.txt", FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
$message = str_replace($censoredfilter, '***', $_GET['message']);
这是有效的,因为file()
实际上返回了数组中的文件。数组的每个元素对应于文件中的一行,换行符仍然附加。添加FILE_IGNORE_NEW_LINES
标志会从每个元素的末尾删除换行符。有关详细信息,请参阅php manual on file。
它还具有处理任何常用行结尾的额外好处。