将preg_replace(已弃用/ e参数)替换为preg_replace_callback

时间:2014-03-16 16:18:49

标签: php regex preg-replace

在使用某些遗留代码时,我遇到了2个preg_replace函数,现已弃用/e参数。 PHP建议将其替换为preg_replace_callback

这些是功能:

  • 首先:

    $content = preg_replace("/(\{([a-zA-Z0-9_]+)\})/e", null, $content);
    

    根据我的理解,/e可以安全地从此功能中删除吗?

  • 第二

    $text = preg_replace(
        "/<(h[2])>(.+)<\/(h[2])>/Uie",
        "'<\\1 id=\"'.createIdByText('\\2').'\">'.stripslashes('\\2').'</\\1>'",
        $text
    );
    

任何人都可以帮我解决这些问题或转换为preg_replace_callback,这样他们就不会抛出弃用警告吗?

1 个答案:

答案 0 :(得分:2)

在第一种情况下,您确实可以删除e。对于第二种情况:

$text = preg_replace_callback(
    "/<h2>(.+)<\/h2>/Ui",
    function($matches) {
        return '<h2 id="' . createIdByText($matches[1]) . '">' . $matches[1] . '</h2>';
    },
    $text
);

我采取了自由来简化正则表达式。不再需要stripslashes来电,因为它只能用于处理addslashes使用的自动/e来电。