警告:preg_replace_callback():修饰符 /e 不能与替换回调一起使用



我对php 5.5有问题:当我使用此代码时:

$source = preg_replace('/&#(d+);/me', "utf8_encode(chr(\1))", $source);
$source = preg_replace('/&#x([a-f0-9]+);/mei', "utf8_encode(chr(0x\1))", $source);

返回错误

已弃用: preg_replace():/e 修饰符已弃用,请改用preg_replace_callback

我与preg_replace_callback一起使用:

$source = preg_replace_callback('/&#(d+);/me', function($m) { return utf8_encode(chr($m[1])); },$source);
$source = preg_replace_callback('/&#x([a-f0-9]+);/mei', function($m) { return utf8_encode(chr("0x".$m[1])); },$source);

它返回警告:

警告:preg_replace_callback():修饰符/e 不能与替换回调一起使用

实现此目的的正确代码是什么?

Narendrasingh Sisodia发布了以下内容作为评论; 这应该是一个答案,所以我在这里将其添加为社区维基:

问题在于您在正则表达式模式中使用的e(修饰符)以及preg_replace_callback()函数。从正则表达式中删除该e(修饰符)。

所以简单的代码看起来像这样:

preg_replace_callback('/&#(d+);/m', function($m) { return utf8_encode(chr($m[1])); },$source);

最新更新