当前位置: 首页 > 知识库问答 >
问题:

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

长孙作人
2023-03-14

我刚刚更新了PHP在我的服务器从PHP 5到PHP 7,我得到了这些警告:

警告:preg_replace_callback()[function.preg-replace-callback0]:要求参数2“chr(\1)”是有效的回调

警告:preg\u replace\u callback()

警告:preg_replace_callback()[function.preg-replace-callback0]:要求参数2“chr(\1)”是有效的回调

警告:preg\u replace\u 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);

我怎样才能解决这个问题?

共有1个答案

江丰羽
2023-03-14

如PHP7.0迁移指南中所述,不再支持/e修饰符(PREG\u REPLACE\u EVAL)。您需要使用一个可调用函数,而不是将作为函数计算的字符串。在您的情况下,用闭包替换字符串函数--chr(0x\\1)

$source = preg_replace_callback(
    '/&#x([a-f0-9]+);/mi',
    fn($m) => chr(hexdec('0x'.$m[1])),
    $source
);

内联字符串替换\\1以生成有效的PHP十六进制,如0x21,在可调用中不再以这种方式工作:您需要hexdec调用来完成相同的操作。

在3v4l上查看它的实际操作。组织。

如果您还没有带有短闭包的PHP7.4,则需要将其编写为:

$source = preg_replace_callback(
    '/&#x([a-f0-9]+);/mi',
    function ($m) { return chr(hexdec('0x'.$m[1])); }, // Now a Closure
    $source
);
 类似资料:
  • 设置一个应该在图像上放置广告的应用程序时,我在运行代码时遇到了这个WordPress错误,这是一个令人沮丧的星期试图修复这个问题。 我希望它能工作,但它给了我以下错误:警告:preg_replace_callback():需要参数2,' 如果有人能想出一个解决方案,那将是惊人的,非常感谢!

  • 我正在使用wordpress插件Ultimate Membership Pro。我的代码中有一个小警告。我想不出问题出在哪里。 我试图检查PHP手册,也做这个主题的研究,但不能解决它。有人知道怎么解决吗?只需要一个提示。 Php代码: 原始代码: 错误: 警告:preg_replace():不再支持 /e修饰符,请在第44行的 /var/www/html/stock-market/wp-conte

  • 我得到以下错误 警告:mysqli_error()只需要1个参数,给定0 问题出在代码的这一行: 整个代码是 包含的文件有以下一行

  • 当我尝试编译它时,我收到以下错误,不知道为什么…… 警告:格式“%x”需要类型为“unsigned int”的参数,但参数2的类型为“char *”[-w format =] 代码:

  • 当试图向会话添加数据(并检查它是否已经存在)时,我会收到以下警告。 警告:in_array()要求参数2为数组,给定null 我怎样才能解决这个问题? 它所指的代码: 我只有在清洁的浏览器上添加第一个产品时才会收到此警告。当我删除它并添加另一个产品时,警告就消失了。同样,如果我添加第二个产品。

  • 此代码返回一个错误preg_replace_callback():要求参数2'Array'是一个有效的回调 我把它换成了 但是我想知道如何使用数组而不是3调用preg_replace_callback? 谢谢