我在使用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不能与替换回调一起使用
实现这一目标的正确代码是什么?
答案 0 :(得分:0)
Narendrasingh Sisodia发布以下评论;它应该是一个答案,所以我在这里将其添加为社区Wiki:
问题在于您在正则表达式模式中使用的e
(修饰符)以及preg_replace_callback()
函数。从正则表达式中删除e
(修饰符)。
所以简单的代码就像:
preg_replace_callback('/&#(\d+);/m', function($m) { return utf8_encode(chr($m[1])); },$source);