Преобразование старого кода preg_replace в новую функцию обратного вызова

Я пытался преобразовать старый 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);

🤔 А знаете ли вы, что...
PHP позволяет встраивать код в HTML-страницы с использованием специальных тегов <?php ?>.


21
1

Ответ:

Решено

preg_replace() \e означает использование замены в качестве php-кода, поэтому в вашем случае, если вы используете preg_replace_callback(), вы должны изменить "'='.sprintf('%02X', ord('\\1'))" в случае 1 на return sprintf('%02X', ord($matches[1]));