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

ilh*_*han 6 php decode

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

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

\u00d6asdf -> Öasdf
Run Code Online (Sandbox Code Playgroud)

Art*_*cto 6

要转换为UTF-8,请执行以下操作:

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

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


Hin*_*nek 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);
} 
Run Code Online (Sandbox Code Playgroud)

  • 这里有几个问题...您用 %uXXXX 代替 \uXXXX,用实体替换序列(这对于显示字符串来说很好,除了现在您必须告诉 htmlspecialchars 不要对字符串进行双重编码,当然,现在您无法区分生成的字符串中最初的 html 实体);最后你调用 urldecode ,它与问题无关——url 编码编码字节(最大值为 %FF),它当然不会解码你刚刚创建的 html 实体。 (3认同)