[英]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.