json_encode()UTF-8错误

时间:2012-05-17 11:57:05

标签: php mysql

我在从数据库中获取带有特殊字符(瑞典语:“åäö”)的文本时遇到了一些问题。

如果我只是进行正常查询,

"SELECT * FROM"  

echo结果:

while($row = mysql_fetch_assoc($result))
{
    echo $row['text']; 
}

......结果很好。

但是,在执行json_encode($array)时,特殊字符已被替换:

{"id":"1","question":"fr\u00e5ga \u00e5\u00e4\u00f6"....

我不知道我尝试过多少不同的事情,包括将数据库转换为UTF-8,将字段转换为utf8_general_ciutf8_encode($string)utf8_decode($string),....

3 个答案:

答案 0 :(得分:3)

你的输出是正确的;这就是你应该如何在JSON中嵌入unicode字符。

答案 1 :(得分:1)

此行为是设计使然。 这些是JSON Unicode转义。

任何兼容的JSON解析器都会正确解析它们。

答案 2 :(得分:1)

$str='{"id":"1","question":"fr\u00e5ga \u00e5\u00e4\u00f6"}';
$obj=json_decode($str);
var_dump($obj);

输出此

object(stdClass)#1 (2) {
  ["id"]=>
  string(1) "1"
  ["question"]=>
  string(13) "fråga åäö"
}

所以一切都很好 - 你只是看到了Unicode字符的JSON编码。

在PHP 5.4中,您可以将JSON_UNESCAPED_UNICODE传递给json_encode,然后您将获得带有UTF-8编码字符的JSON(至少我相信如此 - 尚未测试过)