【问题标题】:php str_replace issue or bug?php str_replace 问题或错误?
【发布时间】:2009-11-21 20:13:11
【问题描述】:

我有以下问题;

这是我试图从下面的字符串中删除 javascript:l(" 的字符串:

javascript:l("Bayou-La-Batre");

我的代码是;

$q_string = str_replace('javascript:l(" ','',$row['1']);

但它失败了。

这比正则表达式替换更快。

有什么想法吗?

【问题讨论】:

    标签: php str-replace


    【解决方案1】:

    你留了一个空格

    $q_string = str_replace('javascript:l("','',$row['1']);
    

    【讨论】:

      【解决方案2】:

      改变

      $q_string = str_replace('javascript:l(" ','',$row['1']);
      

      $q_string = str_replace('javascript:l("','',$row['1']);
      

      【讨论】:

        【解决方案3】:

        每当我遇到此类问题时,我都会尝试在等宽编辑器中格式化我的搜索/替换调用,看看是否会弹出任何内容

        $q_string = str_replace('javascript:l(" ', '', 
                                'javascript:l("Bayou-La-Batre")';
        

        这样格式化,很明显搜索字符串的第 15 个字符与正在搜索的字符串的第 15 个字符不匹配([ ] vs. [B])。

        尝试删除该空格,您应该会很高兴。

        【讨论】:

          【解决方案4】:

          你可以使用

          $q_string = substr($row['1'], 14);
          

          以一定的速度获得相同的结果。我已经测试了三个函数的速度,因此您可以看到它们与速度的比较。

          $string = 'javascript:l("Bayou-La-Batre")';
          
          $str_replace = function($string) {
              return str_replace('javascript:l("', '', $string);
          };
          
          print $str_replace($string) . "\n";
          
          $substr = function($string) {
              return substr($string, 14);
          };
          
          print $substr($string) . "\n";
          
          $preg_replace = function($string) {
              return preg_replace('/^[a-z:\(]+"/', '', $string);
          };
          
          print $preg_replace($string) . "\n";
          
          function measure($function, $string) {
              $start = microtime(true);
              for($i = 0; $i < 1000000; $i++) {
                  $function($string);        
              }
              return microtime(true) - $start;
          }
          
          print 'Substr: ' . measure($substr, $string) . "\n";
          print 'Str replace:' . measure($str_replace, $string) . "\n";
          print 'Preg replace:' . measure($preg_replace, $string);
          

          这个在我机器上的输出

          Bayou-La-Batre")
          Bayou-La-Batre")
          Bayou-La-Batre")
          子字符串:3.7492098808289
          字符串替换:4.5258920192719
          预替换:5.8815109729767

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 2019-06-08
            • 1970-01-01
            • 2012-12-10
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多