【发布时间】:2014-01-08 15:50:47
【问题描述】:
由于弃用,我们目前在网站上收到 preg_replace 错误消息。
我们的代码如下:
$out = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $data);
关于如何将其替换为非弃用代码的任何建议?
【问题讨论】:
标签: php preg-replace deprecated
由于弃用,我们目前在网站上收到 preg_replace 错误消息。
我们的代码如下:
$out = preg_replace('!s:(\d+):"(.*?)";!se', "'s:'.strlen('$2').':\"$2\";'", $data);
关于如何将其替换为非弃用代码的任何建议?
【问题讨论】:
标签: php preg-replace deprecated
preg_ 未被弃用。它只是/e(从 PHP 5.5 开始):
不推荐使用 /e 修饰符。请改用preg_replace_callback()。 有关更多信息,请参阅 PREG_REPLACE_EVAL 文档 关于安全风险。
由于preg_replace_callback() 与preg_replace() 几乎相同,只是它使用回调而不是替换,因此更新代码应该是快速的功课。
【讨论】:
您正在使用修饰符 s 和 e。直接复制自Deprecated feature sin PHP 5.5.x:
preg_replace()/e修饰符现已弃用。相反,请使用preg_replace_callback()函数。
【讨论】:
在这种情况下,我发现这个“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);
【讨论】: