【发布时间】:2014-02-20 08:17:16
【问题描述】:
当我尝试使用 PHP 将以下字符编码为 JSON 时:æ ø å
我只会说null 它应该出现在哪里。我将页眉编码设置为 UTF-8,我知道这种编码可以很好地打印这些字母。但由于某种原因,它不起作用。
这是我当前的代码:
header('Content-Type: text/html; charset=utf-8');
if (isset($_GET['count'])) {
$count = $_GET['count'];
$data_exists = mysql_query("SELECT * FROM display");
if (mysql_num_rows($data_exists) > $count) {
// Next record is available
$get_data = mysql_query("SELECT * FROM display LIMIT ".$count.",1");
while ($data = mysql_fetch_assoc($get_data)) {
$id = $data['id'];
utf8_encode($content = $data['content']);
$return_data = array('id' => $id, 'content' => $content);
echo json_encode($return_data);
}
} else {
// Next record is not available
}
}
当我运行这段代码时,我得到这个 JSON 字符串:{"id":"1","content":null}
数据库记录如下:
+------+--------------------------------+
| ID | Text |
+------+--------------------------------+
| 1 | <div class="text">æøå...</div> |
+------+--------------------------------+
当我不使用任何特殊字符时,一切正常。
感谢您的宝贵时间!
【问题讨论】:
-
数据的真正编码是什么?我猜它是 not UTF-8,因为
json_encode需要 UTF-8 编码的数据,它失败意味着它不是 UTF-8 编码的。此外,utf8_encode($content = $data['content']);什么也不做。 -
你应该提供更多关于数据库真实数据编码的信息。还要确保数据编码正确,检查字符串
mb_check_encoding() -
utf8_encode仅适用于ISO-8859-1编码。如果您在 DB 中的数据有其他编码(但不是UTF-8),则不应使用utf8_encode进行字符集转换。请改用iconv。 -
@Mostafa 表排序规则设置为 utf8_general_ci 表格式为 Compact... 顺便说一句:mb_check_encoding() 输出一个 1到屏幕上?
-
你是怎么检查的?你说“UTF-8”吗?如果是,那么您的字符串无论如何都是 utf-8