【发布时间】:2013-12-30 04:34:38
【问题描述】:
我正在将我的数据库中的一些多语言数据输出到 JSON 对象中,但输出没有显示外来字符,即使我将标题字符集设置为 utf8,它也只显示问号:
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 (الإمارات العربيّة Ø§Ù„Ù…ØªÙ‘ØØ¯Ø©)"}}
【问题讨论】:
-
您确定从数据库中出来的数据是正确的,还是一开始就正确地放入了数据库中?您的数据库表/字段可能设置为 utf-8,但您的 ENTIRE 渲染管道也必须设置为 utf-8,包括 phpdb 连接。 phpmyadmin 可能正确显示它,因为它具有正确配置的连接,而您的代码不是
-
@MarcB 我添加了更多细节,当我在数据库管理工具中查看时数据库中的数据很好......
-
dbiConnect()里面有什么?我猜你的数据库连接字符集定义不正确。
标签: php mysql json utf-8 multilingual