警告:preg_replace_callback():需要参数 2
Warning: preg_replace_callback(): Requires argument 2
我刚刚将服务器上的 PHP 从 php 5 更新为 php 7,我收到了这些警告:
Warning: preg_replace_callback() [function.preg-replace-callback0]: Requires argument 2, 'chr()', to be a valid callback
Warning: preg_replace_callback() [function.preg-replace-callback0]: Requires argument 2, 'chr(0x)', to be a valid callback
Warning: preg_replace_callback() [function.preg-replace-callback0]: Requires argument 2, 'chr()', to be a valid callback
Warning: preg_replace_callback() [function.preg-replace-callback0]: Requires argument 2, 'chr(0x)', to be a valid callback
这是 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);
我该如何解决这个问题?
不再支持 /e
修饰符 (PREG_REPLACE_EVAL
),如 the PHP 7.0 migration guide 中所述。您需要使用可调用函数,而不是将被评估为函数的字符串。在您的情况下,将您的字符串函数 - chr(0x\1)
- 替换为 Closure:
$source = preg_replace_callback(
'/&#x([a-f0-9]+);/mi',
fn($m) => chr(hexdec('0x'.$m[1])),
$source
);
\1
的内联字符串替换以产生有效的 PHP 十六进制,如 0x21
,在可调用文件中不再以这种方式工作:你需要一个 hexdec
打电话来完成同样的事情。
如果您还没有 PHP 7.4 短闭包,您需要将其写为:
$source = preg_replace_callback(
'/&#x([a-f0-9]+);/mi',
function ($m) { return chr(hexdec('0x'.$m[1])); }, // Now a Closure
$source
);
我刚刚将服务器上的 PHP 从 php 5 更新为 php 7,我收到了这些警告:
Warning: preg_replace_callback() [function.preg-replace-callback0]: Requires argument 2, 'chr()', to be a valid callback
Warning: preg_replace_callback() [function.preg-replace-callback0]: Requires argument 2, 'chr(0x)', to be a valid callback
Warning: preg_replace_callback() [function.preg-replace-callback0]: Requires argument 2, 'chr()', to be a valid callback
Warning: preg_replace_callback() [function.preg-replace-callback0]: Requires argument 2, 'chr(0x)', to be a valid callback
这是 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);
我该如何解决这个问题?
不再支持 /e
修饰符 (PREG_REPLACE_EVAL
),如 the PHP 7.0 migration guide 中所述。您需要使用可调用函数,而不是将被评估为函数的字符串。在您的情况下,将您的字符串函数 - chr(0x\1)
- 替换为 Closure:
$source = preg_replace_callback(
'/&#x([a-f0-9]+);/mi',
fn($m) => chr(hexdec('0x'.$m[1])),
$source
);
\1
的内联字符串替换以产生有效的 PHP 十六进制,如 0x21
,在可调用文件中不再以这种方式工作:你需要一个 hexdec
打电话来完成同样的事情。
如果您还没有 PHP 7.4 短闭包,您需要将其写为:
$source = preg_replace_callback(
'/&#x([a-f0-9]+);/mi',
function ($m) { return chr(hexdec('0x'.$m[1])); }, // Now a Closure
$source
);