PHP中德语变音符号的问题

时间:2014-04-30 13:45:10

标签: php json mysqli

我试图从我的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()的文本正确。

2 个答案:

答案 0 :(得分:3)

问题不在于MySQL。实际上,你获得unicode符号的事实证明数据实际上被解释为UTF-8字符(也可能是正确的字符;)。

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

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

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

json_encode($myArray, JSON_UNESCAPED_UNICODE);

有关详细信息,请参阅json_encode functionjson constants

答案 1 :(得分:0)

json_encode使每个ä到\ u00e4。所以我认为输出应该如何。只是不是你想要的方式;)