【问题标题】:PHP preg_replace alternativePHP preg_replace 替代方案
【发布时间】:2014-01-08 15:50:47
【问题描述】:

由于弃用,我们目前在网站上收到 preg_replace 错误消息。

我们的代码如下:

$out = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $data);

关于如何将其替换为非弃用代码的任何建议?

【问题讨论】:

    标签: php preg-replace deprecated


    【解决方案1】:

    preg_ 未被弃用。它只是/e(从 PHP 5.5 开始):

    不推荐使用 /e 修饰符。请改用preg_replace_callback()。 有关更多信息,请参阅 PREG_REPLACE_EVAL 文档 关于安全风险。

    由于preg_replace_callback()preg_replace() 几乎相同,只是它使用回调而不是替换,因此更新代码应该是快速的功课。

    【讨论】:

      【解决方案2】:

      您正在使用修饰符 se。直接复制自Deprecated feature sin PHP 5.5.x

      preg_replace() /e 修饰符现已弃用。相反,请使用preg_replace_callback() 函数。

      【讨论】:

        【解决方案3】:

        在这种情况下,我发现这个“callback_function”可以正常工作:

        $fixed_text = preg_replace_callback ( '!s:(\d+):"(.*?)";!',
        function($m) {
               return ($m[1] == strlen($m[2])) ? $m[0] : 's:' . strlen($m[2]) . ':"' . $m[2] . '";';
        },
        $text);
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 1970-01-01
          • 2011-10-17
          • 1970-01-01
          • 2014-12-30
          • 2020-09-20
          • 2014-06-06
          • 2013-12-22
          相关资源
          最近更新 更多