2010-10-08 83 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。