2015-05-20 3 views
3

Я получаю от внешней службы строку с некоторым литералом utf8.Замените литералы utf8 в строке

$a = $param1; 
echo $a; 

\xe7\xe3 

Как преобразовать $ a (строку utf8 с 8 символами) в 'çã'?

Я знаю, что могу использовать strtr с картой замещений, но я думаю, что, возможно, есть лучший способ.

Упрощая пример, у меня есть простой веб-страницы:

<?php 
echo '<html><body>'.$_GET['aa'].'</body></html>'; 

И я называю это с ?aa=\xe7\xe3 параметром

Браузер показывает \xe7\xe3, но я хочу, чтобы показать çã, как если бы я заявил с двойным котировки "\xe7\xe3".

+0

что такое "ça? Не можете ли вы использовать str_replace (array1, array2, $ a)? – harrrrrrry

+0

@zairwolf: Я могу использовать str_replace, но «çã» - просто пример. Есть десятки символов, которые нужно заменить. – Fernando

+0

@mins: utf8_decode (или encode) просто возвращает ту же строку. Все мое приложение использует utf-8. – Fernando

ответ

0

Используя наконечник из комментариев, которые я получил небольшой другой алгоритм работает для меня:

function decode_code($code){ 
    return preg_replace_callback(
     "@\\\(x)?([0-9a-f]{2,3})@", 
     function($m){ 
      return utf8_encode(chr($m[1]?hexdec($m[2]):octdec($m[2]))); 
     }, 
     $code 
    ); 
} 
Смежные вопросы