我没有使用特定的对象,我自己构建了带有2个嵌套循环的数组.
这是我想要转换为Json的数组的var_dump示例.
array (size=2)
'tram B' =>
array (size=2)
0 =>
array (size=3)
'name' => string 'Ile Verte' (length=9)
'distance' => int 298
'stationID' => int 762
1 =>
array (size=3)
'name' => string 'La Tronche Hôpital' (length=18)
'distance' => int 425
'stationID' => int 771
16 =>
array (size=4)
0 =>
array (size=3)
'name' => string 'Bastille' (length=8)
'distance' => int 531
'stationID' => int 397
1 =>
array (size=3)
'name' => string 'Xavier Jouvin' (length=13)
'distance' => int 589
'stationID' => int 438
在另一个脚本中我有一个类似的结构,json_encode工作正常.
所以我不明白为什么json_encode在这里不起作用.
编辑:编码似乎有问题.当mb_detect_encoding返回ASCII时,json_encode可以工作,但是当它返回UTF8时,它不再起作用.
Edit2:json_last_error()返回JSON_ERROR_UTF8,表示:Malformed UTF-8 characters, possibly incorrectly encoded.
解决方法:
经过2个小时的挖掘(参见编辑)
我发现了以下内容:
>就我而言,这是一个编码问题
> mb_detect_encoding可能返回错误的响应,有些字符串可能不是UTF-8
>在那些字符串上使用utf8_encode()解决了我的问题,但请参阅下面的注释
这是一个递归函数,可以强制转换为UTF-8数组中包含的所有字符串:
function utf8ize($d) {
if (is_array($d)) {
foreach ($d as $k => $v) {
$d[$k] = utf8ize($v);
}
} else if (is_string ($d)) {
return utf8_encode($d);
}
return $d;
}
像这样使用它:
echo json_encode(utf8ize($data));
注意:utf8_encode()根据文档将ISO-8859-1字符串编码为UTF-8,因此如果您不确定输入编码iconv()或mb_convert_encoding()可能是更好的选项,如注释和其他解决方案中所述.
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。