如何编码像\ u00d6这样的字符串?

时间:2010-07-22 12:37:36

标签: php decode

这是编码:\u00d6
这被解码:Ö

我必须使用什么函数将该字符串解码为可读的东西?

\u00d6asdf -> Öasdf

2 个答案:

答案 0 :(得分:6)

要转换为UTF-8,请执行:

preg_replace('/\\\\u([0-9a-f]{4})/ie',
    'mb_convert_encoding("&#x$1;", "UTF-8", "HTML-ENTITIES")',
    $string);

由于这是JSON中使用的转义,另一个选项是json_decode。但是,这也需要在之前转义双引号和反斜杠(\uXXXX转义序列除外)并在字符串周围添加双引号。但是,如果该字符串确实是JSON编码的,并且这是最初激发问题的原因,那么正确答案自然会使用json_decode而不是上述方法。

答案 1 :(得分:2)

通常这是urldecode方法,但它不适用于像你这样的unicode字符。试试这个:

function unicode_urldecode($url)
{
   preg_match_all('/%u([[:alnum:]]{4})/', $url, $a);

   foreach ($a[1] as $uniord)
   {
       $utf = '&#x' . $uniord . ';';
       $url = str_replace('%u'.$uniord, $utf, $url);
   }

   return urldecode($url);
}