0

我有一个 PHP 文件,它从 mysql 表中获取数据,然后 json 对其进行编码。一切正常,直到 mysql 中有一行包含斯堪的纳维亚字母。然后它只返回 null

  {"key":[{"Name":null}]}

我怎样才能让它工作?问题出在 PHP 中还是 MYSQL 中?我试图放在header('content-type: text/html; charset: utf-8');php 文件的开头,但这没有用

<?php
header('content-type: text/html; charset: utf-8');
include 'config.php';


$sql = "Select * from table;



try {
    $dbh = new PDO("mysql:host=$dbhost;dbname=$dbname", $dbuser, $dbpass);  
    $dbh->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
    $stmt = $dbh->query($sql);  
    $results = $stmt->fetchAll(PDO::FETCH_OBJ);
    $dbh = null;
    echo '{"key":'. json_encode($results) .'}'; 
} catch(PDOException $e) {
    echo '{"error":{"text":'. $e->getMessage() .'}}'; 
}


?>

当我使用此代码时:

<?php
$con = mysql_connect("localhost","adsasd","asdasd");
if (!$con)
  {
  die('Could not connect: ' . mysql_error());
  }

mysql_select_db("table", $con);

$result = mysql_query("SELECT NAME from table where ID=1");

while($row = mysql_fetch_array($result))
  {
  echo $row['TABLE'];
  }

mysql_close($con);
?> 

它按原样显示字母:äöåäö

所以问题出在json_encode()零件上?为什么它让整行显示为空,而不是让斯堪的纳维亚字母显示为符号或其他东西?

4

4 回答 4

0

在创建编码 JSON 字符串之前,您可能需要对值或数据进行 urlencode。

还编辑:您需要确保一切都是以 UTF8 为中心的、数据库连接、数据库表以及您对内容类型所做的...

于 2012-05-21T08:59:17.820 回答
0

我建议在您的 *.php 文件和 MySQL 数据库中使用 utf-8 编码。

于 2012-05-21T09:01:03.857 回答
0

我知道您说过排序规则是 UTF-8,但请尝试运行:

$dbh->query('SET NAMES UTF-8');

创建 PDO 对象后,我发现有时它默认为 ISO-8859-1,即使它应该使用 UTF-8。

于 2012-05-21T09:42:34.450 回答
0

而不是 SET NAMES 你应该使用$dbh->query('SET CHARACTER SET utf8');

于 2012-05-22T05:37:35.147 回答