【问题标题】:Problems with german umlauts in PHP [duplicate]PHP中德语变音符号的问题[重复]
【发布时间】:2014-06-16 21:04:23
【问题描述】:

我正在尝试从我的 MySQL 服务器获取一些数据,但德语变音符号已转换为其 unicode 特定代码。

header("Content-type: application/json; charset=utf-8"); 
$mysqli = new mysqli('host', 'user', 'pwd', 'databasename');
$mysqli->set_charset("utf8");

$result = $mysqli->query("SELECT Name FROM Table");
SQLtoJSON($result);


function SQLtoJSON($ab) {
    $tempArray = array();
    $myArray = array();
    while($row = $ab->fetch_object()) {
        $tempArray = $row;
        array_push($myArray, $tempArray);
    }
    echo json_encode($myArray);
}

输出:

[{"Name":"Frische-B\u00e4ckerei-Huber"}]

应该是:

[{"Name":"Frische-Bäckerei-Huber"}]

我也试过$mysqli->query("SET NAMES 'UTF8'"),但没用。服务器的字符集是 UTF-8。

编辑:肯定是json的问题,var_dump()有正确的文字。

【问题讨论】:

  • 您的表格的字符集是否设置为 UTF-8?
  • 每个 json 解析库都会正确理解它,所以我会保持原样。这就是 JS 字符串中 unicode 字符的表示方式。
  • 您在$mysqli->set_charset("utf8")); 中有一个太多的) 更改为$mysqli->set_charset("utf8");,这很可能是问题所在。
  • @gbestard 是的,表格的字符集是 UTF-8

标签: php json mysqli


【解决方案1】:

问题不在于 MySQL。实际上,您获得该 unicode 表示法这一事实证明数据实际上被解释为 UTF-8 字符(也可能是 right 字符;))。

问题在于将其编码为 json。默认情况下,json_encode 会转义这些字符。

顺便说一句,这并没有错。您可以对它们进行转义,但 JSON 也允许对 UTF-8 字符进行转义。 JSON 本身并不意味着人类可读。它只是一种通过线路发送数据的格式。接收方应该能够取消转义 unicode 序列并将其显示为 ü。

无论如何,由于 JSON 也可以包含非转义字符,因此您无需转义它们,并且可以通过传递标志告诉 json_encode 不要:

json_encode($myArray, JSON_UNESCAPED_UNICODE);

请参阅json_encode functionjson constants 了解更多详情。

【讨论】:

    【解决方案2】:

    json_encode 将每个 ä 转换为 \u00e4。所以我认为输出应该是这样的。只是不是你想要的方式;)

    【讨论】:

    • 使用 htmlentities($item,NULL,'UTF-8') 或 utf8_encode($item)
    猜你喜欢
    • 2012-11-16
    • 1970-01-01
    • 2021-07-08
    • 1970-01-01
    • 1970-01-01
    • 2020-12-04
    • 1970-01-01
    • 2021-09-28
    • 1970-01-01
    相关资源
    最近更新 更多