2010-01-05 51 views
12

我有一個Web應用程序(UTF-8),其中一個可用於發送到服務器側使用Ajax時Chartset編碼? JQuery的

áéíóú 
àèìòù 
ÀÈÌÒÙ 
ÁÉÍÓÚ 

確定以下。我使用類似如下發送數據

// Notice $("#myForm").serialize() 
$.get("/path?", $("#myForm").serialize(), function(response) { 

}); 

當我看到我的記錄,我得到(數據庫字符集編碼是UTF-8)

áéíóú 
à èìòù 
ÃÉÃÃ「Ú 
ÀÈÌÒÙ 

即使使用.post的$時,我得到的同樣的結果集

在行動書看連載()方法的JQuery後:

創建親perly格式化和編碼查詢字符串從包裝集中的所有成功的表單元素

但是,如上所示,它似乎沒有工作正常。因此,而不是序列化()方法中,我使用

var objectArray = $("#myForm").serializeArray(); 

var queryString = ""; 
for(var i = 0; i < objectArray.length; i++) { 
    queryString += "&" + objectArray[i]["name"] + "=" + objectArray[i]["value"]; 
} 

$.get("/path?" + queryString, null, function(response) { 

}); 

現在我得到數據庫

áéíóú 
àèìòù 
ÀÈÌÒÙ 
ÁÉÍÓÚ 

所以現在用的序列化()方法時,我失去了一些東西?爲什麼serialize()方法不能按預期工作?

回答

3

jQuery.get像所有的功能jQuery的AJAX應用encodeURIComponent的數據。 如果您通過GET發送數據,XHR會自動處理傳遞URL的編碼。 您可以查看encode文檔,看看哪種編碼方式適用於發送數據,

0

你應該將以下meta標籤添加到啓動和接收頁兩者的頭:

<meta http-equiv="Content-type" content="text/html; charset=utf-8" /> 

這會默認頁面在utf-8中呈現內容。如果這一項不起作用,除了在發送時對字符進行編碼之外,還可以使用encodeURIComponent()。如果編碼未被自動解碼,則需要在接收端運行decodeURIComponent()

4

我用下面的行解決它在PHP:

foreach($_POST as $key => $value) { 
    $_POST[$key] = utf8_decode($value); 
} 
+1

這確實幫了我很多! – kanarifugl 2014-08-26 20:12:35

1

我曾與IE類似的問題。我添加到頁面加載javascript以下:

$.ajaxSetup({ 
     contentType: "application/x-www-form-urlencoded; charset=UTF-8" 
}); 

這似乎解決了大多數字符的問題。

+0

不鼓勵使用ajaxSetup(https://api.jquery.com/jquery.ajaxsetup/)。 但contentType可以直接在$ .ajax()調用中傳遞。 對我這個答案是有幫助的,因爲事件如果ajax請求在ut8中正確編碼,調用可能不明白它的utf8 – Nightingale7 2015-11-30 12:00:10