这让我完全难过:
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]}
答案 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查看上一个错误。