我有一个带有3个嵌套数组的简单php结构。
我不使用特定的对象,而是使用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在这里不起作用。
json_encode
编辑:似乎有编码问题。当mb_detect_encoding返回ASCII,该json_encode作品但当它返回UTF8,它不工作了。
mb_detect_encoding
Edit2:json_last_error()返回JSON_ERROR_UTF8表示:格式错误的UTF-8字符,可能编码不正确。
json_last_error()
JSON_ERROR_UTF8
经过2个小时的挖掘(参考编辑)
我发现以下内容:
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()可能是更好的选择。