Как мне преобразовать следующее в preg_replace_callback (для использования в PHP 7.3.2) - PullRequest
0 голосов
/ 15 мая 2019

Попытка получить код ниже, чтобы не использовать вместо него модификатор /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 Ответ

1 голос
/ 15 мая 2019

Просто используйте анонимную функцию, чтобы вернуть то, что у вас было, используя параметр $m в качестве совпадений, поэтому $m[1] вместо \1:

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

Если вы просто используете '/[\x80-\xFF]/' без группы захвата, тогда вы используете $m[0].

...