2012-01-27 61 views
0

我使用的Android寫一個應用程序的響應,它是假設從服務器獲取一些中國字,使用PHP腳本的服務器,喜歡這裏Android的GET HTTP從PHP含Unicode字符

mysql_query("SET CHARACTER SET utf8", $link); 
$q= mysql_query("SELECT Name FROM ofPeers WHERE Address LIKE '$st' limit 0, 4"); 
while($e = mysql_fetch_array($q)) 
    $output1=$output1.$e["Name"]; 

print $output1; 

了Android使用一些像

HttpClient client = getHttpClient(); 
HttpPost request = new HttpPost(url); 
UrlEncodedFormEntity formEntity = new UrlEncodedFormEntity(postParameters,"UTF-8");   
request.setEntity(formEntity); 
HttpResponse response = client.execute(request); 

代碼,我發現我抓住了一個異常時,我執行的執行語句,像這樣的錯誤分析數據org.json.JSONException:在,中國的漢字字符輸入0結束。我想也許這是由unicode造成的,類似於這篇文章 How to Convert Char set in android?

但是,我目前不知道如何擺脫錯誤!有什麼建議麼!

+0

漢字在網絡瀏覽器中看起來是否正確?如果你可以運行提琴手,你可以快照在RAW格式的響應?我特別感興趣的是看看響應頭中是否有字符編碼器標籤。 – 2012-01-27 15:16:00

+0

是的,中文字符在Firefox中看起來是正確的,我已經測試了這一點。我從未使用過提琴手,我嘗試使用它,並讓你知道結果! – user717245 2012-01-28 09:40:32

回答

0
$output1=$output1.$e["Address"]; 

似乎只是將所有結果拼接成一個字符串。這不會給你JSON輸出,所以你似乎將解析響應作爲JSON,你可以預料到一個語法錯誤。

您可能想要將所有地址放入數組,然後使用json_encode將其轉換爲Android可以讀取的JSON響應。

另外你還有一個SQL注入漏洞。在將其包括在查詢中之前,請使用mysql_real_escape_string而不是$st,或者更好地使用參數化查詢(可在mysqli和PDO中獲得)。使用mysql_set_charset優先於明確的SET CHARACTER SET,否則mysql_real_escape_string將在某些轉角情況下執行不正確。

+0

感謝您的回覆,我沒有在我的php中使用json,實際上,我只是使用字符串,我認爲原因應該是unicode造成的!此外,感謝您提醒我的安全問題在PHP片段! – user717245 2012-01-29 03:12:57