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

时间:2016-06-01 04:54:53

标签: php

我在使用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不能与替换回调一起使用

实现这一目标的正确代码是什么?

1 个答案:

答案 0 :(得分:0)

Narendrasingh Sisodia发布以下评论;它应该是一个答案,所以我在这里将其添加为社区Wiki:

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

所以简单的代码就像:

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