ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

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

2019-09-15 14:38:39  阅读:182  来源: 互联网

标签:php json


我有一个简单的PHP结构,有3个嵌套数组.

我没有使用特定的对象,我自己构建了带有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()可能是更好的选项,如注释和其他解决方案中所述.

标签:php,json
来源: https://codeday.me/bug/20190915/1805068.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有