2012-11-01 19 views
1

簡而言之,從我的android應用程序向PHP發送字符串並使用JSON解碼時,法語字符會造成麻煩。 以下是我在我的Android應用程序現在做(JAVA)帶有PHP的Android JSON,口音沒有正確處理的字符

HttpPost httppost = new HttpPost(//my server and filename); 

    try { 
     List<NameValuePair> nameValuePairs = new ArrayList<NameValuePair>(2); 

     nameValuePairs.add(new BasicNameValuePair("payload", jsonObj.toString())); 
     httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs)); 

     // Execute HTTP Post Request 
     HttpResponse response = httpclient.execute(httppost); 
    }.... 

,這裏是我的PHP代碼

$_POST['payload'] = stripslashes($_POST['payload']); 
$payload = $_POST['payload']; 
error_log(" $payload ", 0); 
$payloadObj = json_decode($payload); 
error_log(" $payloadObj ", 0); 

當英文字母被使用,那麼一切都是完美的,然而是完美的,但是當我重音的frensh字母然後它不起作用。我插入上面的錯誤日誌,看看我得到了什麼,我注意到用法文字母,有效載荷顯示法文字母爲 和payloadObj是空的,所以我猜解碼失敗。

Pleeease幫助我,問題發生在哪裏(在什麼階段)?我該如何解決它?

+0

爲什麼使用'stripslashes()'? – Brad

+0

因爲我正在使用這個信息的MySQL,這是萬一magicQuotes開啓。它沒有對英文字母造成任何損害 – Snake

+0

'stripslashes()'對MySQL沒有任何**,並且完全沒有任何與它有關的事情。你應該禁用魔術引號。如果你不能,請檢查這個答案:http://stackoverflow.com/a/517027/362536 – Brad

回答

0

你試過用iconv()修復它嗎?

//$payload = $_POST['payload']; 
$payload = (isset($_POST['payload'])) ? iconv("UTF-8","UTF-8//IGNORE",$_POST['payload']) ? ''; 
error_log(" $payload ", 0); 
$payloadObj = json_decode($payload); 
error_log(" $payloadObj ", 0); 
+0

json_decode()和json_encode()需要正確的utf8。 –

+1

我會接受答案,只是因爲它給了我關於正確解決方案的暗示。正確的解決方案是做httppost.setEntity(new UrlEncodedFormEntity(nameValuePairs),「UTF-8」);並修復它 – Snake