2014-10-08 16 views
0

我刚从5.3.x升级到5.5.17,下面的代码停止工作(我收到一个空白的响应)。PHP 5.5升级打破这个简单的数组/ JSON编码器

$gestr = mysql_query("SELECT name,age,id FROM users"); 
$star = array(); 
while($starid = mysql_fetch_array($gestr)){ 
    $star[] = array('name'=>$starid['name'],'age'=>$starid['age'],'id'=>$starid['id']); 
} 
$final=array('users'=>$star); 
echo json_encode($final); 

请注意,我简单的SQL语句,但我知道它的工作原理,一路过关斩将while循环,因为我可以附和了$星[1] [名],它打印的用户名。

+2

什么是确切的错误?你为什么认为升级是原因? – 2014-10-08 15:51:36

+0

代码工作正常,直到昨天...我刚刚重新升级后,我得到一个黑色的页面。我可以附加echo语句来回显json_encode($ final)。$ star [1] [name];并输出第一个用户的名字。所以这个错误在$ final数组被创建的地方。 – 0pt1m1z3 2014-10-08 15:53:51

+0

如果您将其封装到try-catch并打印出异常,是否有异常? – 2014-10-08 15:54:52

回答

3

问题在于json_encode无法解析非UTF8编码的名称。感谢@ChrisForrence建议使用json_last_error();

该错误通过添加utf8_encode()修复;

$star[] = array('name'=>utf8_encode($starid['name']),'age'=>$starid['age'],'id'=>$starid['id']); 
+0

也看看那些:['mysql_client_encoding()'](http://en.php.net/manual/de/function.mysql-client-encoding.php),[PHP:Character sets](http: //php.net/manual/en/mysqlinfo.concepts.charset.php),[PHP和MySQL中的UTF-8](http://blog.flowl.info/2014/mastering-unicodeutf-8-encoding-php /)。 – DanFromGermany 2014-10-08 16:24:59