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

时间:2016-04-15 01:08:02

标签: php

我有波斯文"سرما"

然后当我使用json_encode()将其转换为JSON时,我得到一系列转义字符代码,例如\u0633,这似乎是预期的,也是一个理性的过程。但我的困惑在于我不知道如何将它们转换回可读的字符串。我该怎么做PHP?

我应该使用mb_ * family的任何内容吗?我也检查了json_encode()个参数,发现没有什么适合我。

更新 我在DB中保存的内容是: [ “u0633u0631u0645u0627”]

其中显示字符未正确转义。如果我改成它 ["\u0633\u0631\u0645\u0627"]

可以轻松阅读json_decode()

3 个答案:

答案 0 :(得分:4)

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

如果您确定UTF8端到端的一切都是安全的,您可以这样做:

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

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

答案 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"]