繁体   English   中英

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

[英]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);

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

也许尝试编码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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM