2010-10-08 81 views
0

我已阅读关于该主题的每篇文章,但我认为我没有找到对我的问题的回复,这让我发疯。如何阅读PHP中的json_encode之后的亚洲字符(日文,中文)

我得到了几个php文件,一个存储数据到mySQL数据库,另一个读取这些数据:我从世界各地获取数据,似乎我成功地以正确的方式存储亚洲字符,但是当我尝试阅读这些数据,但无法将这些字符恢复。

和其他许多用户一样?而不是正确的字符。

顶我的PHP文件我:

header('Content-Type: application/json; charset=utf-8'); 

然后

mysql_query("SET CHARACTER SET utf8", $link); 
mysql_query("SET NAMES 'utf8'", $link); 

然后

$fab[] = array_map(utf8_encode,$array); 

在这里,如果我print_r ($fab)我失去了亚洲字符:-(

然后w我做:

$json_string = json_encode($fab); //originale 

我得到的是"??"

如何正确地获取正确的字符? json字符串然后通过 到iPhone客户端。

任何建议或帮助将不胜感激。

谢谢你的好意, 法布里奇奥

回答

2

好像你是双编码呢?如果你从已经使用utf8编码的mysql获得数据,那么$fab[] = array_map(utf8_encode,$array);又有什么意义呢?

2天前刚刚有类似的事情,当时我从ExtJs表单接受utf8数据,结果搞砸了。这是因为我使用utf8_encode从脚本接收的数据(使用utf8)。所以我打破了它的双重编码。在你的情况下也许是一样的

+0

好吧,firts thanx,然后我搬走了array_map,但我得到了相同的结果:在我的测试中,我得到的有时是“??”和其他时间十六进制代码,但从来没有亚洲字符:( – Fabrizio 2010-10-11 10:42:37

+0

如果你得到像\ uxxxx(其中xx用十六进制数字表示)之类的东西,那么编码是正确的,UTF和Unicode字符必须用这种方式编码。字符串转换成JavaScript对象(即与eval(jsonString),然后打印出它应该打印在亚洲字符字段的内容 – Tseng 2010-10-11 13:28:30

+0

如果编码是正确的,我想我需要解码客户端(在iPhone应用程序),是否正确?无论如何,帮助大亨。 – Fabrizio 2010-10-14 11:59:11

0

问题是什么Tseng说:阵列上的双重编码:我认为我做了正确的测试,但我根本没有。

所以,我需要的唯一代码是:

而($ OBJ = mysql_fetch_object($ RS)){$ ARR [] = $ OBJ; }

$ json_string = json_encode($ arr); echo($ json_string);

再次Tseng,thanx。