我有一个json编码的数组并存储到数据库中。我所有的php文件都是utf8,我的mysql数据库是utf8_general_ci。
我的数组包含可能包含重音字符的名称,json_encode转换为\ u字符。该数组存储在我的数据库中。当我使用jQuery.parseJSON时,强调的角色显示正确。
info = jQuery.parseJSON(data);
console.log(info);
//"Bob Épine" which is good
但是当我想在PHP中使用json_decode时,\ u字符会保留。
print_r($this->opts['name']);
echo $this->opts['name'];
//Bob \u00c9pine
//Bob u00c9pine
我发现了这个函数PHP: Replace \u characters in json string,这是要走的路吗? 它确实有效,但它似乎避免了问题,而不是修复它。
答案 0 :(得分:2)
首先,将JSON存储在数据库表中听起来像是一个有缺陷的应用程序设计,但是将它放在一边......
这听起来像Bobby Tables领域。我的意思是,当您将数据插入数据库时,听起来好像没有转义\
。这意味着它会从字符串中删除,因此您最终得到的只是uxxxx
而不是\uxxxx
,这意味着它们无法解码。
现在,解决这个问题的方法有很多种,但是你需要做的第一件事是确保数据正确地插入到数据库中,并且编码的JSON字符串在你输入的时候是相同的它。如果你这样做,你发现你仍然遇到这个问题,我有一个我刚才写的函数,它会将unicode代码点转换为它们的二进制表示形式(我只是为你找到 >)
答案 1 :(得分:1)
PHP json_decode与某些(如果不是全部)UTF-8非ASCII字符(> 1个字节)不兼容。在prototype.js中,我不得不添加一个新的JSON编码函数,它将编码所有非ASCII字符(我不再拥有该代码)。
从json_encode库中试用phpjs。