gpt4 book ai didi

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

转载 作者:IT老高 更新时间:2023-10-28 11:52:05 31 4
gpt4 key购买 nike

我有一个带有 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 表示:Malformed UTF-8 characters, possibly incorrectly encoded .

最佳答案

经过 2 小时的挖掘(cf Edits)

我发现了以下内容:

  • 就我而言,这是一个编码问题
  • 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()如评论和其他解决方案中所述,可能是更好的选择。

关于php - 为什么 json_encode 会返回一个空字符串,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19361282/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com