2012-03-23 114 views
1

我對JavaScript中的PHP腳本和使用jQuery庫執行AJAX請求。
這裏是我的命令執行AJAX請求:jQuery ajax + responseText +字符編碼

$.ajax({ 
    async: "false", 
    cache: "false", 
    data: {login: strLogin, password: strPassword}, 
    datatype: "text", 
    error: connexionAjaxError, 
    success: connexionAjaxSuccess, 
    type: "POST", 
    url: "./Connexion" 
}); 

「.Connexion」 是一個URL重定向到我的PHP腳本。
connexionAjaxError是在收到HTTP響應後不可避免地執行的JavaScript函數。
原因是:我的PHP腳本產生的純文本/頁面的HTTP狀態代碼等於500
這是我的PHP腳本的最相關的部分:

header("HTTP/1.0 500 Internal Server Error; 
     Content-type: text/plain; 
     charset=ISO-8859-1"); 

echo "été"; 

這裏是connexionAjaxError的簽名回調函數:

function connexionAjaxError(jqXHR, textStatus, errorThrown) 

我的PHP結果字符串 「ETE」。
我的PHP內部編碼是ISO-8859-1,因此結果字符串以十六進制表示法編碼[e9 74 e9]。

但connexionAjaxError回調函數中的jqXHR.responseText包含1個字符的字符串。
我已經使用JavaScript String對象的charCodeAt方法來獲取字符的Unicode(UTF-8?)代碼。
該字符以十進制表示法編碼爲65535,相當於以十六進制表示法的[ff ff]。

我不明白爲什麼jqXHR.responseText不包含3個字符的字符串「été」。
我不是JavaScript專家,但我想jqXHR.responseText只能包含以UTF-8編碼的字符串。
因此,jqXHR.responseText中的字符串「été」將以十六進制表示法編碼[c3a9 74 c3a9]。
我檢索從以下網站中的文字「E」的UTF-8編碼:http://www.utf8-chartable.de/

回答

1

我做了很大的發展在西班牙,我已經注意到了一些東西,可能會幫助你,因爲我已經通過了這個已經:

在頭功能的字符集應該是UTF-8。

此外,FILE本身(PHP腳本)必須以UTF-8格式保存,如果您使用Notepad ++編輯文件並選擇編碼爲UTF-8而不使用BOM,則可以輕鬆實現此目的。

同樣適用於您的JavaScript和HTML文件,它們應該全部使用UTF-8編碼,而不使用BOM而不使用ANSI。

讓我知道!

+0

感謝您的回答。現在我對如何編碼JS/PHP字形串有了更好的想法。如果ISO-8859-1編碼適用於我的PHP/JS腳本,則字符串「été」以十六進制表示法編碼[e9]。但是,如果UTF-8編碼應用於我的PHP/JS腳本,則字符串「été」以十六進制表示法編碼[c3 a9]。告訴我,如果我錯了。 – user1139666 2012-03-24 14:48:40

0

嘗試設置的contentType像這樣在你的電話,據我所知jQuery的阿賈克斯總是UTF-8如果沒有指定。

$.ajax({ 
... 
    datatype: "text", 
    contentType: "application/x-www-form-urlencoded;charset=ISO-8859-1", 
    error: connexionAjaxError, 
    success: connexionAjaxSuccess, 
    type: "POST", 
... 
}); 

編輯: 如果我的回答是不是有益的,它可以幫助你檢查服務器的字符集的配置,同時還張貼。

+0

根據以下jQuery文檔:http://api.jquery.com/jQuery.ajax/ contentType設置僅適用於發送到服務器的數據。 但我的問題涉及從服務器收到的數據。 我在我的一個PHP腳本中運行了mb_internal_encoding函數。 mb_internal_encoding函數已返回「ISO-8859-1」。 因此: [1]結果字符串「été」以十六進制表示法編碼[e9 74 e9]。 [2]我在HTTP響應的頭文件中指定了「charset = IS0-8859-1」。 – user1139666 2012-03-24 13:57:52