PHP- preg_replace на шестнадцатеричном символе - PullRequest
1 голос
/ 02 февраля 2012

У меня есть строка, например:

'<indirizzo>Via Universit\E0 4</indirizzo>'

Whit HEX char ... мне нужно, чтобы строка стала:

'<indirizzo>Via Università 4</indirizzo>'

Итак, я использую:
$text= preg_replace('/(\\\\)([a-f0-9]{2})/imu', chr(hexdec("$2")), $text);

Но не работает, потому что hexdec не использует значение $ 2 (то есть 'E0'), но использует только значение '2'.Таким образом, hexdex ("2") равен "2", а chr ("2") не равен "à"

Что я могу сделать?

Ответы [ 3 ]

1 голос
/ 02 февраля 2012
$text='<indirizzo>Via Universit\E0 4</indirizzo>';

function cb($match) {
    return html_entity_decode('&#'.hexdec($match[1]).';');
}
$text= preg_replace_callback('/\\\\([a-f0-9]{2})/imu', 'cb', $text);

echo $text;
1 голос
/ 02 февраля 2012

Вы должны указать свой chr(hexdec()) в качестве обратного вызова. Просто вызов этих функций и добавление результата в качестве параметра к preg_replace не делает этого.

preg_replace_callback('/\\\([a-f0-9]{2})/imu',
                      function ($match) { return chr(hexdec($match[1])); },
                      $text)

Сказав это, вероятно, есть лучшие способы сделать то, что вы хотите сделать в целом.

0 голосов
/ 23 марта 2013

Вы также можете использовать

<?php
$str = preg_replace('/\\([a-f0-9]{2})/imue', '"\x$1"', '<indirizzo>Via Universit\E0 4</indirizzo>');
...