【问题标题】:JSON does not read special charactersJSON 不读取特殊字符
【发布时间】: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

标签: php json encoding utf-8


【解决方案1】:

我解决了这个问题。

问题确实是问题下的 cmets 中所述的编码。

我通过在请求数据之前运行以下查询解决了这个问题:

mysql_query("SET CHARACTER SET utf8");

仅适用于遇到类似问题的其他用户。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多