首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >为什么json_encode会返回空字符串

为什么json_encode会返回空字符串
EN

Stack Overflow用户
提问于 2013-10-14 21:24:14
回答 12查看 104.7K关注 0票数 119

我有一个简单的php结构,有3个嵌套数组。

我不使用特定的对象,我自己构建带有2个嵌套循环的数组。

下面是我想要转换为Json的数组的var_dump示例。

代码语言:javascript
复制
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

EN

回答 12

Stack Overflow用户

发布于 2015-02-03 07:37:02

Matthieu Riegler提出了非常好的解决方案,但是我不得不稍微修改它来处理对象:

代码语言:javascript
复制
function utf8ize($d) {
    if (is_array($d)) 
        foreach ($d as $k => $v) 
            $d[$k] = utf8ize($v);

     else if(is_object($d))
        foreach ($d as $k => $v) 
            $d->$k = utf8ize($v);

     else 
        return utf8_encode($d);

    return $d;
}

另请注意:json_last_error()在调试json_encode()/json_encode()函数时可能很有帮助。

票数 38
EN

Stack Overflow用户

发布于 2015-11-16 00:28:52

对我来说,这个问题的答案是在我的PDO连接中设置charset=utf8

代码语言:javascript
复制
$dbo = new PDO('mysql:host=localhost;dbname=yourdb;charset=utf8', $username, $password);
票数 32
EN

Stack Overflow用户

发布于 2015-09-29 16:10:41

Adam Bubela也提出了非常好的解决方案,他帮助我解决了我的问题,下面是简化的函数:

代码语言:javascript
复制
function utf8ize($d)
{ 
    if (is_array($d) || is_object($d))
        foreach ($d as &$v) $v = utf8ize($v);
    else
        return utf8_encode($d);

    return $d;
}
票数 10
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19361282

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档