在PHP中将Unicode \u序列(如\u041a)转换为普通的UTF-8文本

4
我有一个字符串如下: "\u041a\u043b\u0443\u0431 Test"; 它是由json_encode()解码的,原始字符串是俄语中的"Клуб Test"。 当我将其放到js中时, alert("\u041a\u043b\u0443\u0431 Test"); 我能够正确地显示它,就像在屏幕上一样。因此,js以某种方式正确地将其解码为正常视图。 问题是我该如何在php中做同样的事情,是否有任何内置方法?
答案是: $json_in = '{"testKey":"\u041a\u043b\u0443\u0431 Test"}'; $json_out = json_decode($json_in, true); 或者 将 "\u041a\u043b\u0443\u0431" 转换为 "Клуб" ,然后执行html_entity_decode($str, null, 'UTF-8');
2个回答

6

在转换数据时,请使用 JSON_UNESCAPED_UNICODE 选项。

echo json_encode($text, JSON_UNESCAPED_UNICODE);

谢谢,我确实没有太关注json_encode的第三个参数,我会去了解一下。但我的问题是关于已经转义过的字符串,例如我可以通过使用Firebug-XmlHttpRequests来调试其他网站。所以我需要解码现有的内容而不是编码任何东西。 - Yehor
@QuadroVal,这篇帖子上被接受的解决方案并不是解决你问题的正确方式。这是PHP本身提供的本地功能,不需要额外的复杂性。解码也是同样的方式。 - Starx
请告诉我一下原生功能是什么,谢谢 =) 你是说json_decode吗? 但是看看文档http://www.php.net/manual/en/function.json-decode.php,在第四个参数中没有JSON_UNESCAPED_UNICODE选项。它只用于json_encode。正如我所说,我可以影响编码方式。 - Yehor
@QuadroVal,不需要指定该选项,它会自动执行。请尝试一次。 - Starx
是的,你说得对。我之前尝试过,但我的问题在于我只是尝试解码字符串(而不是json字符串),例如//$json_in = "\u041a\u043b\u0443\u0431 Test"; 而不是 $json_in = '{"testKey":"\u041a\u043b\u0443\u0431 Test"}'; $json_out = json_decode($json_in, true); 谢谢。 - Yehor

1

您可能需要使用HTML实体来打印字符:

  • Ӓ 代表十进制代码
  • Ī 代表十六进制代码

不行,我想要"\u041a\u043b\u0443\u0431 Test"变成"Клуб Test"。 - Yehor
把以下与编程有关的内容从英语翻译成中文。仅返回已翻译的文本:你需要用&#x代替\u并附加一个分号。 - globin
嘿,感谢澄清! 真的有效果,我把"\u041a\u043b\u0443\u0431"转换为"Клуб",然后使用html_entity_decode($str, null, 'UTF-8'),我得到了"Клуб"。但是你能告诉我,在某些情况下,我应该总是使用&#x还是只用&#?Ӓ用于十进制代码 Ī用于十六进制代码在这里什么是十进制代码,它什么时候被使用。不过无论如何都谢谢,我想这就是答案! - Yehor
抱歉,我应该在一开始就明确说明。 使用任何更适合的方式!在这种情况下,使用十六进制,因为您已经有了十六进制代码。 - globin

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接