【问题标题】:Str_replace for multiple itemsStr_replace 用于多个项目
【发布时间】:2011-11-28 03:52:36
【问题描述】:

我记得以前这样做过,但找不到代码。我使用 str_replace 替换一个字符,如下所示:str_replace(':', ' ', $string);,但我想替换以下所有字符 \/:*?"<>|,而不为每个字符执行 str_replace。

【问题讨论】:

  • 你想用空格替换所有这些字符吗?
  • 不要害怕参考优秀的 php.net 手册和review the params section 看看你想要的是否可行。

标签: php string str-replace


【解决方案1】:

像这样:

str_replace(array(':', '\\', '/', '*'), ' ', $string);

或者,在现代 PHP(从 5.4 开始的任何版本)中,稍微不那么罗嗦:

str_replace([':', '\\', '/', '*'], ' ', $string);

【讨论】:

    【解决方案2】:

    str_replace() 可以接受一个数组,所以你可以这样做:

    $new_str = str_replace(str_split('\\/:*?"<>|'), ' ', $string);
    

    您也可以使用preg_replace():

    $new_str = preg_replace('~[\\\\/:*?"<>|]~', ' ', $string);
    

    【讨论】:

    • 假设 OP 意味着应该替换反斜杠,那么 preg_replace 模式对我不起作用。为了让反斜杠按预期工作,我必须在模式中使用其中的 4 个(即“\\\\”)。
    • 好的答案,添加@dogbert 答案将使那些不阅读手册并且没有意识到 str_split 返回数组的人可以完成。
    • 在 OP 的情况下,str_replace()preg_replace() 相比有什么优势(反之亦然)?
    • @ludditedev 无论哪种方式都没有真正的优势,这只是一个偏好问题
    • @MadhurBhaiya 将正则表达式更改为'~[\\+&gt;&lt;-]~'(注意- 的位置)。破折号 (-) 是一个正则表达式元字符,因此需要对其进行转义或策略性地放置在字符类中([] 中的所有内容)。看到这个答案:stackoverflow.com/a/7604888/396458
    【解决方案3】:

    例如,如果你想用replace1替换search1,用replace2替换search2,那么下面的代码将起作用:

    print str_replace(
        array("search1","search2"),
        array("replace1", "replace2"),
        "search1 search2"
    );
    

    // 输出:replace1 replace2

    【讨论】:

      【解决方案4】:
      str_replace(
          array("search","items"),
          array("replace", "items"),
          $string
      );
      

      【讨论】:

        【解决方案5】:

        如果你只是替换单个字符,你应该使用strtr()

        【讨论】:

        • 只有单个字符?怎么会?
        【解决方案6】:

        您可以使用preg_replace()。以下示例可以使用命令行 php 运行:

        <?php
        $s1 = "the string \\/:*?\"<>|";
        $s2 = preg_replace("^[\\\\/:\*\?\"<>\|]^", " ", $s1) ;
        echo "\n\$s2: \"" . $s2 . "\"\n";
        ?>
        

        输出:

        $s2: "字符串          "

        【讨论】:

        • 在字符类中转义过多。 (见接受的答案)
        【解决方案7】:

        我遇到了一种情况,我不得不用两种不同的替换结果替换 HTML 标记。

        $trades = "<li>Sprinkler and Fire      Protection Installer</li>
        <li>Steamfitter </li>
        <li>Terrazzo, Tile and Marble      Setter</li>";
        
        $s1 =  str_replace('<li>', '"', $trades);
        
        $s2 = str_replace('</li>', '",', $s1);
        
        echo $s2;
        

        结果

        “洒水器和防火安装工”、“蒸汽装配工”、“水磨石、瓷砖和大理石安装工”,

        【讨论】:

          【解决方案8】:

          我猜你正在照顾这个:

          // example
          private const TEMPLATE = __DIR__.'/Resources/{type}_{language}.json';
          
          ...
          
          public function templateFor(string $type, string $language): string
          {
             return \str_replace(['{type}', '{language}'], [$type, $language], self::TEMPLATE);
          }
          

          【讨论】:

            【解决方案9】:

            在我的用例中,我参数化了 HTML 文档中的一些字段,一旦加载这些字段,我就会使用 str_replace 方法匹配并替换它们。

            <?php echo str_replace(array("{{client_name}}", "{{client_testing}}"), array('client_company_name', 'test'), 'html_document'); ?>
            

            【讨论】:

              猜你喜欢
              • 1970-01-01
              • 1970-01-01
              • 2016-02-22
              • 1970-01-01
              • 1970-01-01
              • 1970-01-01
              • 2010-11-18
              相关资源
              最近更新 更多