[英]Php json_encode converts utf8 string to characters codes
我有一个波斯语文本"سرما"
然后,当我使用json_encode()
将其转换为 JSON 时,我得到了一系列转义字符代码,例如\س
,这似乎是一个合理的过程。 但我的困惑在于我不知道如何将它们转换回可读的字符串。 我应该如何在 PHP 中做到这一点?
我应该使用 mb_* 系列的任何东西吗? 我还检查了json_encode()
参数,但没有找到适合我的参数。
更新我在数据库中保存的内容是:["u0633u0631u0645u0627"]
这表明字符没有正确转义。 而如果我将其更改为["\س\ر\م\ا"]
它变得很容易被json_decode()
读取
当它被解码时,它们应该在另一端被转换回来。 这是最安全的选项,因为可能无法保证传输或存储不会破坏多字节编码。
如果您确定 UTF8 端到端的一切都是安全的,您可以执行以下操作:
$res = json_encode($foo, \JSON_UNESCAPED_UNICODE);
也许尝试编码unicode字符,然后json_encoding它,然后在另一端(接收JSON)解码json,然后解码unicode。
示例:
//Encode
json_encode(utf8_encode($string));
//Decode
utf8_decode(json_decode($string));
它的简单只是使用 JSON_UNESCAPED_SLASHES 属性你的问题不是 utf8 你需要强制 JSON 不要逃避斜线
例子
$bar = "سرما";
$res = json_encode($bar, JSON_UNESCAPED_SLASHES );
// $res equal to ["\u0633\u0631\u0645\u0627"]
如果你在你的 MYSQL 数据库中检查结果,它会在你没有使用的时候发生 使用 addedlashes() 示例
$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
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.