尝试获取下面的代码,而不使用/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;
}
答案 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]
。