PHP:utf8_encode不起作用,空json_encode?

时间:2014-11-17 08:11:07

标签: php mysql json encode collation

我有以下代码:

$rows=array();
while($row=mysql_fetch_assoc($result))
{
    echo $row["titel"];                           
    $rows[] = array_map('utf8_encode', $row);
}
echo json_encode($rows);

不知何故,输出是空的,虽然我使用" json_encode"功能。我的列的排序规则区分了utf8_bin和utf8_general_ci。 " echo $ row [" titel"]"输出我的表中包含的每个条目的标题,所以我猜错误必须在编码中发生。

我很感激每一个答案:)

4 个答案:

答案 0 :(得分:4)

你可以使用这个想法:

$rowUtf8encode[]=array_map('utf8_encode',$row);
$rows[]=array_map('json_encode',$rowUtf8encode);
echo($rows);

它很有趣

答案 1 :(得分:0)

似乎你错过了php包:“php-xml”。 确保您的服务器上有“php-xml”(或“php5-xml”)软件包。

您可以在服务器上运行folloing命令进行检查:

rpm -qa | grep 'php-xml'

rpm -qa | grep 'php5-xml'

答案 2 :(得分:0)

让数据库进行编码!

首先你应该知道一些事情:

  • MySQL的latin1 ISO 8859-1但是CP1252!查看差异here
  • utf8_encode仅从ISO 8859-1编码为UTF-8
  • 要转换编码,最好使用mb_convert_encoding(或iconv
  • mysql_函数已弃用!请改用PDOmysqli! (寻找准备好的陈述)
  • json_encode会通过调用json_last_error_msg
  • 生成错误消息

因此,假设您的应用程序使用latin1编码的字符串。然后你应该在需要时更改mysql连接的字符集:

//Change to utf8
mysql_query("SET NAMES 'utf8'");
$result = mysql_query($sqlQuery);
$rows = array();
while($row = mysql_fetch_assoc($result)) {
    $rows[] = $row;
}
echo json_encode($rows);
//Back to latin1 (if needed)
mysql_query("SET NAMES 'latin1'");

答案 3 :(得分:0)

完成连接后,请更改字符集。 这是由于您的数据库字符集配置。

$ mysqli = new mysqli(“localhost”,“UsrChingon”,“PwdChingon”,“DbChingona”); $ mysqli-> set_charset( “UTF8”);