如果是json数据
{"inf": "Väri-väri"}
保存为
{"inf": "Vu00e4ri-vu00e4ri"}
如何使用php恢复整个json中的字母õ,ä,ö,ü等。我试过utf8_decode和utf8_encode。 谢谢。
答案 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代码,字母将被恢复。