从文本文件中替换使用数组中的查找单词

时间:2011-04-12 12:16:21

标签: php arrays filter chat str-replace

我有问题,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);
}

4 个答案:

答案 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

它还具有处理任何常用行结尾的额外好处。