目前,我将以下 unicode 字符串存储在数据库中。
\u4ece\u4e0b\u5468\u4e00\u8d77\uff0c\u5947\u5f02
如果我通过 php 将它发送到苹果 APNS 服务器,它会在 iphone 上正确显示。但是,如果我想在网站上显示这些字符(中文字符),它不会以中文字符显示它们,而是纯粹显示为 \u4ece\u4e0b\u5468\u4e00\u8d77\uff0c\u5947\u5f02
任何人都可以帮助我如何正确显示它们?
那不是“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 表示。)