我对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);