PHP- preg_replace on hex char

时间:2012-02-02 12:13:33

标签: php preg-replace chr

我有一个字符串,如下所示:

'<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 个答案:

答案 0 :(得分:1)

您需要将chr(hexdec())指定为回调。只需调用这些函数并将结果作为参数提供给preg_replace,就不会这样做。

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

话虽如此,可能有更好的方法来做你想做的事情。

答案 1 :(得分:1)

$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;

答案 2 :(得分:0)

您也可以使用

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