需要帮助在php中替换preg_replace_callback?

时间:2017-04-05 11:59:23

标签: php regex preg-replace preg-replace-callback

需要帮助解决如下错误,

preg_replace(): The /e modifier is no longer supported, use preg_replace_callback instead in line 601

以下代码出错,

$string = preg_replace('~&#x0*([0-9a-f]+);~ei', 'chr(hexdec("\\1"))', $string);
$string = preg_replace('~&#0*([0-9]+);~e', 'chr(\\1)', $string);

AM尝试过。

$string =  preg_replace_callback('~&#x0*([0-9a-f]+);~ei', 'chr(hexdec("\\1"))',function ($match) {
return ($match[1]);
}, $string);

但仍然有这样的错误?

Requires argument 2, 'chr(hexdec("\1"))'

1 个答案:

答案 0 :(得分:1)

如错误所示,PHP版本不再支持e修饰符。

preg_replace_callback等价物如下所示:

$string = preg_replace_callback('~&#x([0-9a-f]+);~i', function ($m) {
    return chr(hexdec($m[1]));
}, $string);

注意:不需要正则表达式中的0*,因为后面的模式会捕获零,并且不会在捕获组中捕获这些零。

但是,因为您的PHP版本等于或高于5.5(those versions produce the error),您可以依赖html_entity_decode

$string = html_entity_decode($string);