警告:preg_replace_callback():需要参数2

时间:2017-07-07 23:18:07

标签: php preg-replace-callback

我刚刚将服务器上的PHP从php 5更新为php 7,并且我收到了这些警告:

  

警告:preg_replace_callback()[function.preg-replace-callback0]:需要参数2,' chr(\ 1)',才能成为有效的回调

     

警告:preg_replace_callback()[function.preg-replace-callback0]:需要参数2,' chr(0x \ 1)',才能成为有效的回调

     

警告:preg_replace_callback()[function.preg-replace-callback0]:需要参数2,' chr(\ 1)',才能成为有效的回调

     

警告:preg_replace_callback()[function.preg-replace-callback0]:需要参数2,' chr(0x \ 1)',才能成为有效的回调

这是PHP代码:

private function _decode( $source )
{
    $source = html_entity_decode($source, ENT_QUOTES, 'UTF-8');
    $source = preg_replace_callback('/&#(\d+);/me',"chr(\\1)", $source);
    $source = preg_replace_callback('/&#x([a-f0-9]+);/mei',"chr(0x\\1)", $source);

    return $source;
}

警告来自:

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

我如何解决这个问题?

1 个答案:

答案 0 :(得分:3)

/e中不再支持PREG_REPLACE_EVAL修饰符(chr(0x\\1))。您需要使用可调用函数,而不是将被计算为函数的字符串。在你的情况下,用一个Closure代替你的字符串函数 - $source = preg_replace_callback( '/&#x([a-f0-9]+);/mi', function ($m) { return chr(hexdec('0x'.$m[1])); }, // Now a Closure $source );

\\1

0x21的内联字符串替换产生有效的PHP十六进制,如 draggedItemSpec { beginDrag(props, monitor, connect) { /*how do I access component state here? Why there is a limitation that when creating dragged object, you should only use props?*/ } } ,在callable中不再有效:您需要the PHP 7.0 migration guide调用才能完成相同操作。

hexdec