2013-03-16 137 views
0

首先,我的數據庫編碼是utf-8。jQuery/AJAX/php編碼噩夢

我必須通過POST方法發送字符串Fußballindex.php。當我使用一個帶有action="index.php"的HTML表單發送它時,它被髮送爲Fu%DFball並正確返回,我在php文件上使用htmlentities()。它效果很好。當我嘗試使用jQuery/AJAX發送它時,問題就開始了。

$("#Form").submit(function() { 
$.ajax({ 
    type: "POST", 
    dataType : "text", 
    url: "index.php", //Does the validation 
    data: $("#Form").serialize(), 
    success: function(data) { 
     alert(data) 
    }, 
}); 
return false; 
}); 

它被作爲Fu%C3%9Fball和返回FuÃ和我什麼都試過將其解碼或以不同的方式發送。以下是返回在各種情況下:

在php文件發送正常,與htmlentities()

Fuà 

正常發送,而不htmlentities()htmlspecialchars()在php文件

Fußball 

發送通常與utf8_decode()上的php文件

Fu 

發送字符串之前使用escape(),對jQuery腳本encodeURIComponent()contentType: "utf-8"使得在某種程度上.php文件無法理解提交的形式,但不僅如此,它仍然將字符串作爲Fu%C3%9Fball

我還使用了適當的命令爲每個文件類型編碼我所有的文件爲utf-8,這沒有任何區別,所以我認爲它是所有utf-8開始。

+0

首先,擺脫所有'htmlentities()'調用 - 這需要固定在根,創建實體將不是必要的。你的*頁面*編碼是什麼?看起來它可能不是UTF-8。你能使它成爲UTF-8嗎? – 2013-03-16 12:25:43

+0

也應該是utf-8。我添加了'mb_internal_encoding(「UTF-8」);'當進行測試時,看看這是否是問題,並沒有什麼區別。 – Alex 2013-03-16 12:32:08

+2

打開頁面時,請查看瀏覽器的「編碼」菜單。這是關於使用什麼編碼的最後一句話 – 2013-03-16 12:32:50

回答

1

確保您的網頁頁面的編碼也是UTF-8。

默認情況下,如果它是ISO-8859-1,它將錯誤地解析UTF-8字符,正如您所體驗的那樣。

要打開頁面,請查看瀏覽器的「編碼」菜單:這是使用什麼編碼的最後一個字。

可能是您的服務器配置爲輸出HTML文件的ISO-8859-1內容類型標頭。有關如何解決該問題,請參閱How to change the default encoding to UTF-8 for Apache?