PHP的json_encode转换UTF8字符串的字符代码
我有波斯文字"سرما"
PHP的json_encode转换UTF8字符串的字符代码
,然后当我将它转换JSON使用json_encode()
来,我得到了一系列的转义字符代码,如\u0633
这似乎可以预料和一个合理的过程。但我的困惑在于我不知道如何将它们转换回可读的字符串。我应该怎么做在PHP中?
我应该使用任何mb_ *家族吗?我也检查了json_encode()
参数,发现没有适合我的东西。
UPDATE 我得到保存在我的数据库是: [ “u0633u0631u0645u0627”]
这说明字符不正确地转义。而如果我将其更改为 ["\u0633\u0631\u0645\u0627"]
它变得易于通过json_decode()
它们应该在解码时转换回另一端。这是最安全的选择,因为它可能无法保证传输或存储不会破坏多字节编码。
如果你确信一切是UTF8终端到终端,你可以做安全:
$res = json_encode($foo, \JSON_UNESCAPED_UNICODE);
不,它不能解决问题。 –
解决了问题。您的解决方案奏效 –
存储在数据库中时,仍然需要修复您的转义问题。如果它不是逃避反斜杠,它不是逃避其他特殊字符,所以你可以打开SQL注入。 – Barmar
也许尝试编码中的Unicode字符,然后json_encoding它,然后在另一方(接收JSON)解码json,然后解码unicode。
例子:
//Encode
json_encode(utf8_encode($string));
//Decode
utf8_decode(json_decode($string));
不'json_decode'你想要什么? – Barmar
不,它只是让它们回到原样。我的意思是\ u * notation ... –
它适合我。我找回带有波斯字符的原始字符串。 – Barmar