为什么json_encode返回一个空字符串

我有一个带有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在这里不起作用。

编辑:似乎有编码问题。当mb_detect_encoding返回ASCII,该json_encode作品但当它返回UTF8,它不工作了。

Edit2:json_last_error()返回JSON_ERROR_UTF8,表示:格式错误的UTF-8字符,可能编码不正确。

回答:

经过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()可能是更好的选择。

以上是 为什么json_encode返回一个空字符串 的全部内容, 来源链接: utcz.com/qa/398472.html

回到顶部