繁体   English   中英

json_encode问题

[英]json_encode problem

这让我完全难过:

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]}

我将其发布为答案,因为我需要普通答案框的完整格式化功能。

是的,这是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"

因此, 假设 我们正在处理损坏的NBSP ,我们可以假定您正在使用ISO-8859或Windows-1252。 我们可以使用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,则它们将拒绝输入。)

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

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

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

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

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