我有一个简单的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。
发布于 2015-02-03 07:37:02
Matthieu Riegler提出了非常好的解决方案,但是我不得不稍微修改它来处理对象:
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()函数时可能很有帮助。
发布于 2015-11-16 00:28:52
对我来说,这个问题的答案是在我的PDO连接中设置charset=utf8
。
$dbo = new PDO('mysql:host=localhost;dbname=yourdb;charset=utf8', $username, $password);
发布于 2015-09-29 16:10:41
Adam Bubela也提出了非常好的解决方案,他帮助我解决了我的问题,下面是简化的函数:
function utf8ize($d)
{
if (is_array($d) || is_object($d))
foreach ($d as &$v) $v = utf8ize($v);
else
return utf8_encode($d);
return $d;
}
https://stackoverflow.com/questions/19361282
复制相似问题