2

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

4

2 回答 2

2

首先,将 JSON 存储在数据库表中听起来像是一种有缺陷的应用程序设计,但暂时搁置一会......

对我来说,这听起来像是Bobby Tables的领地。\我的意思是,当您将数据插入数据库时​​,听起来您并没有逃避。这意味着它被从字符串中剥离出来,所以你最终得到的是uxxxx而不是\uxxxx,这意味着它们无法被解码。

现在,解决这个问题的方法多种多样,但您需要做的第一件事是确保数据正确插入数据库,并且编码的 JSON 字符串与您输入的字符串相同。如果你这样做并且你发现你仍然有这个问题,我有一个我前一段时间写的函数,它将 unicode 代码点转换为它们的二进制表示(我只是为你找到

于 2012-08-07T20:57:32.353 回答
1

PHP json_decode 不能很好地处理一些(如果不是全部)UTF-8 非 ASCII 字符(>1 字节)。在prototype.js 中,我必须添加一个新的JSON 编码函数,该函数将对所有非A​​SCII 字符进行编码(我不再拥有该代码)。

尝试phpjs库中的json_encode 。

于 2012-08-07T20:56:30.750 回答