json_encode和口音

时间:2012-08-07 20:52:06

标签: php javascript json encoding

我有一个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,这是要走的路吗? 它确实有效,但它似乎避免了问题,而不是修复它。

2 个答案:

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