0

目前,我将以下 unicode 字符串存储在数据库中。

\u4ece\u4e0b\u5468\u4e00\u8d77\uff0c\u5947\u5f02

如果我通过 php 将它发送到苹果 APNS 服务器,它会在 iphone 上正确显示。但是,如果我想在网站上显示这些字符(中文字符),它不会以中文字符显示它们,而是纯粹显示为 \u4ece\u4e0b\u5468\u4e00\u8d77\uff0c\u5947\u5f02

任何人都可以帮助我如何正确显示它们?

4

1 回答 1

3

那不是“Unicode”,那些是 Unicode 转义序列。这:“下”是一个Unicode字符。这: "\u4e0b" 是字符串"backslash you 4 ee zero bee"1如果您将该转义序列与 JSON 完全相同,则在解码 JSON 时它恰好解析为正确的字符。那是因为转义序列恰好在 JSON 中使用。不过,这暗示了另一个问题,即您正在手动创建 JSON,如下所示:

$apns = "{\"message\":\"$unicodeEscape\"}";

不要那样做。用您选择的编程语言创建一个原生数组并对其进行 JSON 编码:

$apns = json_encode(array('message' => '从下周一起,奇异'));

如果您当前这样做,字符串也会在 iPhone 上显示为“\u4ece...”,因为字符串内容会正确地进行 JSON 转义以保留其原始内容。

对于 HTML 来说,这些转义序列一开始并没有什么特别的意义,它们当然不代表汉字。

实际的中文字符存储在您的数据库中,例如以 UTF-8 编码,而不是仅在某些上下文中相关的转义序列。

我建议您阅读http://kunststube.net上的大多数文章以获取更多详细信息。


由于它们显然是 JSON 转义,因此将它们从当前格式转换回来的最简单方法应该是将它们解析为 JSON:

$string = json_decode("\"$string\"");

这仅在字符串不包含任何会使 JSON 语法无效的内容时才有效,例如". 否则,您可以调整此解决方案


1(该字符串也由“Unicode 字符”组成,因为这些字符中的每一个都可以用 Unicode 表示。)

于 2012-11-01T07:52:21.970 回答