带有mysql内容的json_encode和utf-8中的变音符号

时间:2010-05-06 18:20:26

标签: php mysql json utf-8 diacritics

我觉得我的胡子在试图找到问题时会长大。

基本问题是,变音符号/特殊符号äöß...不起作用。我想每个人都厌倦了这些问题,但在网上找到的所有解决方案似乎都不起作用。

我在utf-8 Mysql数据库中有utf-8内容。我觉得问题就在数据库连接的某处,但我无法理解。

  

character_set_client utf8
  character_set_connection utf8
  character_set_database utf8
  character_set_filesystem二进制
  character_set_results utf8
  character_set_server latin1
  character_set_system utf8

我不确定问题是否是character_set_server的latin1,因为我没有进入那个mysql的东西。我也不知道如何更改原因我无法访问mysql服务器的配置文件。

无论是什么令我感到困惑,如果我从数据库中获取结果并回显它,print_r会给出正确的结果。

ini_set('default_charset','utf-8');
header('Content-Type: text/plain; > charset=utf-8');

Firefox说char编码是utf-8,但是当我输出时:

print_r($listnew);
echo json_encode($listnew[5]);

print_r结果一切正确,但json_encode做错了。

的print_r:

[5] => Array (
       [id] => 5
       [data] => U-Bahnhof Theresienstraße
       [size] => 17
)

json_encode:

  

{“id”:5,“data”:“U-Bahnhof Theresienstra \ u00dfe”,“size”:17}

我知道json_encode需要一个utf-8字符串才能在那里正常工作,我觉得我在这里遇到编码问题,但我无法确定它在哪里。

任何帮助将不胜感激,

提前感谢。

I3

1 个答案:

答案 0 :(得分:5)

嗯......我认为这实际上是正确的方式。 \u00dfß的正确unicode表示形式。当你json_decode()回来时,它会再次成为ß

这给你带来了什么问题?接收端是不是正确解码了?如果您使用标准json_*函数,则应该这样做。

manual中的所有示例都显示相同的内容 - 超出ASCII范围的字符将转换为数字序列。