PHP UTF-8编码搞砸了
我正在将一些多语言数据从数据库输出到一个JSON对象中,但输出没有显示外来字符,它只显示问号,即使我将标题字符集设置为utf8,如下所示:PHP UTF-8编码搞砸了,php,mysql,json,utf-8,multilingual,Php,Mysql,Json,Utf 8,Multilingual,我正在将一些多语言数据从数据库输出到一个JSON对象中,但输出没有显示外来字符,它只显示问号,即使我将标题字符集设置为utf8,如下所示: header('Content-Type: application/json; charset=utf-8'); 当我查看phpMyAdmin中的数据时,它正确地显示了字符。我做错什么了吗 以下是格式化JSON输出的PHP代码: $numRows = new stdClass(); $mysqli = dbiConnect(); $query = "SE
header('Content-Type: application/json; charset=utf-8');
当我查看phpMyAdmin中的数据时,它正确地显示了字符。我做错什么了吗
以下是格式化JSON输出的PHP代码:
$numRows = new stdClass();
$mysqli = dbiConnect();
$query = "SELECT * FROM country_codes";
if ($stmt = $mysqli->prepare($query)) {
/* execute query */
$stmt->execute();
/* store result */
$stmt->store_result();
$numRows->cc = $stmt->num_rows;
/* close statement */
$stmt->close();
}
$mysqli->close();
$count = 0;
$dataCountryCodes = '{';
$mysqli = dbiConnect();
$query = "SELECT * FROM country_codes";
if ($result = $mysqli->query($query)) {
while($row = $result->fetch_assoc()){
$count++;
$rowData = new stdClass();
$rowData->code = $row['code'];
$rowData->name = $row['name'];
$dataCountryCodes = $dataCountryCodes.'"'.$rowData->code.'": {"Code":"'.$rowData->code.'","Country":"'.$rowData->name.'"}';
if ($count != $numRows->cc) {
$dataCountryCodes = $dataCountryCodes.',';
}
}
}
$mysqli->close();
$dataCountryCodes = $dataCountryCodes.'}';
if ($returnCountryCodes == 1) {
return $dataCountryCodes;
} else {
header('Content-Type: application/json; charset=utf-8');
echo ($dataCountryCodes);
}
这就是我得到的:
{"AE": {"Code":"AE","Country":"United Arab Emirates (???????? ???????? ????????)"}}
这是我在手工编码时得到的结果,在我将JSON翻译成HTML后,这将很好地呈现:
{"AE": {"Code":"AE","Country":"United Arab Emirates (الإمارات العربيّة المتّØدة)"}}
您没有显示dbiConnect函数。连接到MySQL后,请检查并尝试使用
设置名称“UTF8”
:
$con=mysqli_connect("host", "user", "pw", "db");
if (!$con)
{
die('Failed to connect to mySQL: ' .mysqli_connect_errno());
}
/* change character set to utf8 */
if (!$con->set_charset("utf8")) {
printf("Error loading character set utf8: %s\n", $con->error);
}
正如政府所说:
SET NAMES指示客户端将使用哪个字符集发送SQL
向服务器发送的语句。。。它还指定服务器应该使用的字符集
用于将结果发送回客户端
试试这个:
$mysqli = dbiConnect();
$mysqli->query("set names utf8")
您确定数据从数据库中出来是正确的,还是首先正确地放入了数据库中?您的DB表/字段可能设置为utf-8,但您的整个渲染管道也必须设置为utf-8,包括phpdb连接。phpmyadmin的显示可能是正确的,因为它有一个正确配置的连接,而您的代码不是t@MarcB我添加了更多的细节,当我在DB管理工具中查看DB中的数据时,它是很好的…里面有什么
dbiConnect()
?我猜您的数据库连接字符集没有正确定义。