2010-03-18 28 views
23

我發送UTF-8,日文文本到我的服務器。 它適用於Firefox。我的access.log和標題是:JQuery AJAX沒有發送UTF-8到我的服務器,只在IE中

/ajax/?q=%E6%BC%A2%E5%AD%97 
Accept-Charset ISO-8859-1,utf-8;q=0.7,*;q=0.7 
Content-Type application/x-www-form-urlencoded; charset=UTF-8 

Howeer,在IE8,我的access.log說:

/ajax/?q=?? 

出於某種原因,IE8是把我的AJAX調用到問號。爲什麼!?我根據一些教程添加了scriptCharset和ContentType,但仍然沒有運氣。

這是我的代碼:

$.ajax({ 
    method:"get", 
    url:"/ajax/", 
    scriptCharset: "utf-8" , 
    contentType: "application/x-www-form-urlencoded; charset=UTF-8", 
    data:"q="+query ..., 
    ... 
    }) 
+0

是啓動調用的頁面還utf-8編碼(具有正確的字符集定義)? – 2010-03-18 21:08:50

+0

是的,有META標籤:。此外,接受字符集是在形式。 – TIMEX 2010-03-18 21:09:37

+0

頁面是否實際以UTF-8格式保存?前幾天有個類似的問題,那就是在文件中指定UTF-8字符集,但文件保存爲ANSI。 – 2010-03-18 21:14:47

回答

53

嘗試用encodeURIComponent()

data:"q="+encodeURIComponent(query) 

編碼查詢參數作爲bobince在他的評論很正確地指出,如果你使用的對象符號傳遞參數它會處理編碼本身的阿賈克斯方法..

因此

data:{ q : query } 

將使jQuery的處理編碼..

+0

+1這是我的第一個想法,但我認爲jQuery處理編碼。現在,如果數據已經設置爲查詢字符串,jQuery將無法處理編碼。咄! – 2010-03-18 21:26:05

+0

@Andy,我在開始時有同樣的想法,但後來注意到了實際的代碼.. :) – 2010-03-18 21:30:44

+3

是的,這是一個很好的理由將'{q:query}'映射到'ajax()'中並讓它jQuery擔心你的編碼問題。 – bobince 2010-03-18 21:51:42

0

我知道這是一個老的文章,但最近我有這個問題,我願意貢獻以防萬一別人有同樣的問題。 我正在使用PHP,但我確信每種服務器端語言都有一個選項。這只是一對夫婦的事情:

  1. 確保您通過添加標題發送您的Ajax響應正確的標題(「內容類型:text/html的;字符集= utf-8」);這必須是你的第一行。如果您有任何錯誤表明頭文件已經發送或者類似的東西,那是因爲代碼中的某個地方在發送頭文件之前輸出了額外的空間或東西,所以請檢查您的代碼。當你在你的服務器中構建你的響應時,確保你使用echo htmlentities($ your-string,null,'utf-8)將所有的字符轉換爲對應的HTML字符。因爲即使在告訴IE你正在發送utf-8數據之後,IE似乎忘記了它,或者它不會簡單地假設任何東西,所以將它添加到你的代碼中將確保正確的輸出。

謝謝大家的幫助。

2

我讀過這篇文章,希望它能解決我遇到的問題,並且必須處理utf8轉換。

就我而言,事實證明,服務器引擎(node.js)計算的數據的內容長度與數據被認爲是原始的,而不是utf8,因此兩個字符擴展字符在uft8計算好像他們導致服務器發送一個字符的一個字符太少。

見我做什麼在這裏解決它:Not well formed Json when sending to CouchDB

0

使用encodeURIComponent()在JavaScript中。下面是示例:

function doPost() 
{ 
    var URL = "http://localhost/check.php?yab=" + encodeURIComponent(document.getElementById("formSearch").childNodes[1].value); 
    xmlHttp.open("GET", URL); 
    xmlHttp.send(); 
}; 
相關問題