在json中编码和解码

时间:2015-12-22 17:55:07

标签: php

如果是json数据

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

保存为

{"inf": "Vu00e4ri-vu00e4ri"}

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

3 个答案:

答案 0 :(得分:1)

对于获取选项jsong_encode,您有一些标记:http://php.net/manual/en/json.constants.php尝试

json_encode($myVar,JSON_UNESCAPED_UNICODE)

答案 1 :(得分:1)

您的案例中的问题本身不是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));

答案 2 :(得分:0)

查看php documentation。如果你解码json代码,字母将被恢复。