我有波斯文"سرما"
然后当我使用json_encode()
将其转换为JSON时,我得到一系列转义字符代码,例如\u0633
,这似乎是预期的,也是一个理性的过程。但我的困惑在于我不知道如何将它们转换回可读的字符串。我该怎么做PHP?
我应该使用mb_ * family的任何内容吗?我也检查了json_encode()
个参数,发现没有什么适合我。
更新 我在DB中保存的内容是: [ “u0633u0631u0645u0627”]
其中显示字符未正确转义。如果我改成它
["\u0633\u0631\u0645\u0627"]
json_decode()
答案 0 :(得分:4)
它们应该在解码后转换回另一端。这是最安全的选择,因为可能无法保证传输或存储不会破坏多字节编码。
如果您确定UTF8端到端的一切都是安全的,您可以这样做:
$res = json_encode($foo, \JSON_UNESCAPED_UNICODE);
答案 1 :(得分:0)
也许尝试编码unicode字符,然后json_encoding它,然后在另一边(接收JSON)解码json,然后解码unicode。
示例:
//Encode
json_encode(utf8_encode($string));
//Decode
utf8_decode(json_decode($string));
答案 2 :(得分:0)
它很简单,只需使用JSON_UNESCAPED_SLASHES属性 您的问题不是utf8,您需要强制JSON不能逃脱斜杠
示例
L(X[0..m-1], Y[0..n-1]) = MAX ( L(X[0..m-2], Y[0..n-1]), L(X[0..m-1], Y[0..n-2]) )
如果在MYSQL数据库中检查结果 当您不使用addslashes()时发生 例子
$bar = "سرما";
$res = json_encode($bar, JSON_UNESCAPED_SLASHES );
// $res equal to ["\u0633\u0631\u0645\u0627"]