为什么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()可能是更好的选择。

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

Groovy:为什么按空格split()对一个空字符串进行返回会返回一个空字符串的列表?

为什么我对WinGetTitle的调用返回一个空字符串?

为什么 req.query.code 返回一个空字符串?

为什么此请求返回一个空字符串?

为什么nextLine()返回一个空字符串?

为什么 Promise 返回一个空字符串?

为什么我的函数返回一个空字符串?

为什么`TRegEx.split` 返回一个空字符串作为第一个元素?

为什么0.ToString(“#。##”)返回一个空字符串而不是0.00或至少为0?

为什么我的所有EditText.getText()。toString()返回一个空字符串?

为什么这个(主要是)空的Perl子例程返回一个空字符串?

为什么在Django模型图像中,Media.url返回一个空字符串,而不是图像链接?

为什么在for循环中第二次运行函数会返回一个空字符串?

为什么连接两个空字符串会导致一个空字符串?

为什么我无法使用golang解码此JSON?它总是打印一个空字符串

为什么在 C++ 中将字符串和 char 连接起来会返回一个空字符串?

php realpath()返回一个空字符串

$(“#myTextArea”)。val()返回一个空字符串

getPropertyValue(“ backgroundColor”)返回一个空字符串

当我将一个char添加到空字符串(如“” + c)时,为什么返回一个未知值?

为什么Spring Boot返回一个字符串而不是JSON

添加一个空字符串vs toString-为什么不好?

为什么PHP将“ \ r \ n”添加到一个空字符串?

为什么我从 jquery find().text() 得到一个空字符串?

为什么我的密码字段的值总是一个空字符串?

为什么element.style.backgroundColor属性会给出一个空字符串?

为什么我的密码字段的值总是一个空字符串?

为什么返回Settings.Secure.getString(context.getContentResolver(),Settings.Secure.ANDROID_ID)一个空字符串;

为什么unset()会改变json_encode格式化字符串的方式?