如何将以下内容转换为preg_replace_callback(在PHP 7.3.2中使用)

时间:2019-05-15 19:49:49

标签: php preg-replace-callback

尝试获取下面的代码,而不使用/e修饰符(使用preg_replace_callback)。

private function encodeHeader($input, $charset = 'ISO-8859-1')
{
    preg_match_all('/(\w*[\x80-\xFF]+\w*)/', $input, $matches);
    foreach ($matches[1] as $value) {
        $replacement = preg_replace('/([\x80-\xFF])/e', '"=" . strtoupper(dechex(ord("\1")))', $value);
        $input = str_replace($value, '=?' . $charset . '?Q?' . $replacement . '?=', $input);
    }

    return $input;
}

1 个答案:

答案 0 :(得分:1)

只需使用匿名函数来返回您拥有的内容,并使用$m参数作为匹配项,那么用$m[1]代替\1

$replacement = preg_replace_callback('/([\x80-\xFF])/',
                                     function($m) {
                                         return "=" . strtoupper(dechex(ord($m[1])));
                                     }, $value);

如果仅使用'/[\x80-\xFF]/'而不使用捕获组,则使用$m[0]