Php json_encode将utf8字符串转换为字符代码


Php json_encode converts utf8 string to characters codes

我有一个波斯语文本"سرما"

然后,当我使用json_encode()将其转换为JSON时,我得到了一系列转义字符代码,如'u0633,这似乎是意料之中的,也是一个合理的过程。但我的困惑在于我不知道如何将它们转换回可读的字符串。我应该如何在PHP中做到这一点?

我应该用mb_*家族的东西吗?我也检查了json_encode()参数,没有发现任何适合我的。

更新我在数据库中保存的内容是:["u0633u0631u0645u0627"]

这表明字符没有正确转义。如果我把它改成["'u0633'u0631'u0645'u0627"]它变得容易被json_decode() 读取

当解码时,它们应该在另一端转换回来。这是最安全的选项,因为可能无法保证传输或存储不会损坏多字节编码。

如果你确信UTF8端到端的一切都是安全的,你可以做:

$res = json_encode($foo, 'JSON_UNESCAPED_UNICODE);

http://php.net/manual/en/function.json-encode.php

也许可以尝试编码unicode字符,然后json_encoding它,然后在另一端(接收json)解码json,然后解码unicode。

示例:

//Encode
json_encode(utf8_encode($string));
//Decode
utf8_decode(json_decode($string)); 

它很简单,只需使用JSON_UNESCAPED_SLASHES atribute你的问题不是utf8,你需要强制JSON不能逃脱斜杠

示例

$bar = "سرما";
$res = json_encode($bar, JSON_UNESCAPED_SLASHES );
// $res equal to ["'u0633'u0631'u0645'u0627"]

如果您在MYSQL数据库中检查结果当你不使用addslashes()时就会发生这种情况示例

$bar = "سرما";
$res = json_encode($bar, JSON_UNESCAPED_SLASHES );
$res = addslashes($res);
// $res equal to ["''u0633''u0631''u0645''u0627"] now it's ready to use in MYSQL