我试图从我的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()的文本正确。
答案 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 function
和json constants
。
答案 1 :(得分:0)
json_encode使每个ä到\ u00e4。所以我认为输出应该如何。只是不是你想要的方式;)