json_encode问题

时间:2011-03-22 22:56:25

标签: php json

这让我完全难过:

print_r($json);
echo json_encode($json);

输出:

Array
(
    [query] => dia
    [suggestions] => Array
        (
            [0] => Diana Johnson
            [1] => Diane Abbott
        )

)
{"query":"dia","suggestions":[null,null]}

究竟出了什么问题?

编辑只是为了添加一般内容,这是另一个示例:

Array
(
    [query] => david
    [suggestions] => Array
        (
            [0] => David Cameron
            [1] => David Amess
            [2] => David Anderson
            [3] => David Blunkett
            [4] => David Burrowes
        )

)
{"query":"david","suggestions":["David Cameron",null,null,null,null]}

2 个答案:

答案 0 :(得分:3)

我将此作为答案发布,因为我需要正常答案框的完整格式化功能。

是的,它是UTF-8好的。从PHP交互式提示符:

php > $david = urldecode('David%A0Amess');
php > echo json_encode($david);
null
php > $david = urldecode('David%20Amess');
php > echo json_encode($david);
"David Amess"
php > $david = urldecode('David%c2%a0Amess');
php > echo json_encode($david);
"David\u00a0Amess"

因此,我们可以假设您正在处理either ISO-8859 or Windows-1252, given that we're dealing with a broken NBSP.我们可以使用iconv解决此问题:

php > $david = urldecode('David%A0Amess');
php > $david_converted = iconv('Windows-1252', 'UTF-8', $david);
php > echo json_encode($david_converted);
"David\u00a0Amess"

所以,这意味着你需要不信任你从MySQL中取出的东西,假设你已经完成了SET NAMES的事情。显然,在插入数据时出现了问题。你可能没有给MySQL格式良好的UTF-8,它愚蠢地没有抱怨。 (如果您使用其他更智能,更正确的数据库,并尝试插入未编码的NBSP,他们会拒绝输入。)

答案 1 :(得分:2)

这看起来像一个自动完成脚本。我假设您的结果是从数据库加载的,您确定它们是utf-8吗?如果你不能通过硬编码数组来复制这个功能,那么它可能是一个编码问题。

根据http://php.net/manual/en/function.json-encode.php,“此功能仅适用于UTF-8编码数据。”

您还可以使用http://php.net/manual/en/function.json-last-error.php查看上一个错误。