Я пытался преобразовать старый php-код, содержащий метод preg_replace, в новый, но не могу справиться. У меня есть три похожих метода preg_replace:
$encoded = preg_replace("/([^A-Za-z0-9!*+/ -])/e", "'='.sprintf('%02X', ord('\\1'))", $encoded);
$encoded = preg_replace("/([\(\)\"])/e", "'='.sprintf('%02X', ord('\\1'))", $encoded);
$encoded = preg_replace('/([\000-\011\013\014\016-\037\075\077\137\177-\377])/e',
"'='.sprintf('%02X', ord('\\1'))", $encoded);
Не могли бы вы помочь мне и перейти на более новый метод preg_replace_convert?
Я пытался сделать что-то подобное для первого, но я не знаю, как вставить метод sprintf в функцию соответствия:
$encoded = preg_replace_callback("/([^A-Za-z0-9!*+/ -])/", function ($matches) {
return chr($matches[1]);
}, $encoded);
preg_replace() \e
означает использование замены в качестве php-кода, поэтому в вашем случае, если вы используете preg_replace_callback()
, вы должны изменить "'='.sprintf('%02X', ord('\\1'))"
в случае 1 на return sprintf('%02X', ord($matches[1]));
Какую старую версию вы хотите конвертировать?