繁体   English   中英

json中的编码和解码

[英]Encoding and decoding in json

如果是JSON数据

{"inf": "Väri-väri"} 

被保存为

{"inf": "Vu00e4ri-vu00e4ri"}

如何使用php恢复整个json中的字母õ,ä,ö,ü等。 utf8_decode和我尝试过的utf8_encode。 谢谢。

您有一些jsong_encode标志,用于获取选项: http : jsong_encode试试

json_encode($myVar,JSON_UNESCAPED_UNICODE)

您遇到的问题不是JSON编码本身,而是存储编码的JSON文档的方式。 请注意,编码后的JSON文档实际上如下所示:

$a = ["inf" => "Väri-väri"];
echo json_encode($a) . "\n";
// prints: {"inf":"V\u00e4ri-v\u00e4ri"}

这是PHP中的预期行为,并且与RFC-7159中的JSON规范完全一致:

任何字符都可以转义。 如果字符在基本多语言平面中(U + 0000至U + FFFF),则可以表示为六个字符的序列:反向固线,后跟小写字母u,后跟四个编码十六进制数字字符的代码点。 十六进制字母A至F可以为大写或小写。 因此,例如,仅包含单个反斜线字符的字符串可以表示为“ \\ u005C”。

但是,存储数据时有时会丢失\\字符。 一个疯狂的猜测是,您正在使用SQL将这些字符串存储在关系数据库中,并且无法正确转义。 我建议的第一件事是调查如何存储数据,并确保在将这些字符串存储在数据库中时正确地转义反斜杠。 如果正确存储,则json_decode可以轻松将编码后的字符解码回常规的unicode字符。

另外,您可以通过将JSON_UNESCAPED_UNICODE标志传递到json_encode来禁用此行为:

echo json_encode($a, JSON_UNESCAPED_UNICODE));

看一下php文档 如果您解码json代码,则字母将被恢复。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM