【问题标题】:to replace using find word in array from text file使用从文本文件中的数组中查找单词替换
【发布时间】:2011-04-12 12:16:20
【问题描述】:

我的问题是 str_replace 不能替换倒数第二个单词...第一个单词有效,然后倒数第二个在数组中无效。我尝试在“聊天”中输入消息“鸭苹果香蕉鸡” .php?message="然后变成这样:

输出:

"***er apple banana chicken"

badwords.txt:

duck;
apple;
banana;
chicken;
water;

聊天.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);
}

【问题讨论】:

    标签: php arrays filter chat str-replace


    【解决方案1】:

    str_replace(array('things', 'go', 'here'), '', $text)

    应该用任何内容替换文本中找到的数组中的任何值

    $censoredfilter = file("badwords.txt");
    $censoredfilter = implode("\n", $censoredfilter);
    $censoredfilter = explode(";", $censoredfilter);
    
    str_replace($censoredfilter, '***', $_GET['message']);
    

    【讨论】:

      【解决方案2】:

      内爆的错误用法有没有?

      $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);
      

      【讨论】:

      • 正如@ben 下面所说,取决于您正在运行的操作系统,或者您正在运行的文本编辑器,换行符可能是“\n”或“\r” .删除它们只是试图考虑所有情况:)
      【解决方案3】:

      要添加到@dogmatic69 的答案,我还考虑从您的 badwords.txt 文件中删除 ; 并将代码缩短为:

      $censoredfilter = file_get_contents("badwords.txt");
      $censoredfilter = explode("\n", $censoredfilter);
      
      $message = str_replace($censoredfilter, '***', $_GET['message']);
      

      还要注意,如果 badwords.txt 可由其他任何人编辑,他们的文本编辑器可能会使用不同的行尾,例如\r\n,或 \r 导致您的脚本失败。

      【讨论】:

        【解决方案4】:

        如果您删除 ; 的替代解决方案是:

        $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 了解更多信息。

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

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2017-11-04
          • 2020-12-20
          • 1970-01-01
          • 2016-08-19
          • 2011-04-25
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多