我有一个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()
部分?
为什么它会使整行显示为空而不仅仅是让斯堪的纳维亚字母显示为 标志或什么?
答案 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');