MYSQL / PHP斯堪的纳维亚字母

时间:2012-05-21 08:48:22

标签: php mysql character-encoding

我有一个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 个答案:

答案 0 :(得分:0)

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

编辑另外:您需要确保所有内容都是以UTF8为中心的,数据库连接,数据库表格以及您为内容类型所做的工作......

答案 1 :(得分:0)

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

答案 2 :(得分:0)

我知道你说过排序规则是UTF-8但是试着跑:

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

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

答案 3 :(得分:0)

您应该使用$dbh->query('SET CHARACTER SET utf8');

而不是SET NAMES