PHP的json_encode转换UTF8字符串的字符代码

问题描述:

我有波斯文字"سرما"PHP的json_encode转换UTF8字符串的字符代码

,然后当我将它转换JSON使用json_encode()来,我得到了一系列的转义字符代码,如\u0633这似乎可以预料和一个合理的过程。但我的困惑在于我不知道如何将它们转换回可读的字符串。我应该怎么做在PHP中?

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

UPDATE 我得到保存在我的数据库是: [ “u0633u0631u0645u0627”]

这说明字符不正确地转义。而如果我将其更改为 ["\u0633\u0631\u0645\u0627"]它变得易于通过json_decode()

+1

不'json_decode'你想要什么? – Barmar

+0

不,它只是让它们回到原样。我的意思是\ u * notation ... –

+0

它适合我。我找回带有波斯字符的原始字符串。 – Barmar

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

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

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

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

+0

不,它不能解决问题。 –

+0

解决了问题。您的解决方案奏效 –

+0

存储在数据库中时,仍然需要修复您的转义问题。如果它不是逃避反斜杠,它不是逃避其他特殊字符,所以你可以打开SQL注入。 – Barmar

也许尝试编码中的Unicode字符,然后json_encoding它,然后在另一方(接收JSON)解码json,然后解码unicode。

例子:

//Encode 
json_encode(utf8_encode($string)); 

//Decode 
utf8_decode(json_decode($string));