2011-09-05 115 views
2

我有一些特殊字符的位置:
http://209.141.56.244/test/char.php特殊字符顯示爲?標誌着

但是當我通過AJAX抓住這個文件在這裏,他們顯示爲回來嗎?標記:
http://209.141.56.244/test/char.html

這些字符應該是「ISO-8859-1西方」,但切換瀏覽器的編碼,以任何選項沒有幫助。

這是爲什麼,我該如何解決?

+0

檢查物品的代碼轉換像UTF-8 ISO,這看起來像一個雙解碼。 –

+0

我不會否認我的html非常混亂,不符合標準,當我有機會時我會解決這個問題。 @Jared將.html設置爲utf-8沒有幫助 – dukevin

+0

給utf-8一個機會 - 這並不複雜; ) –

回答

5

您的服務器發送的Ajax響應爲text/html,這會使瀏覽器採用UTF-8(這是默認設置),但您的數據本身不是UTF-8。

發送Ajax響應爲text/html; Charset=Windows-1252(你不是真的在使用ISO-8859-1),它應該可以工作。

header('Content-Type: text/html; Charset=Windows-1252'); 

PS:將瀏覽器切換到另一個字符集並沒有幫助,因爲這隻會影響頁面本身。後續的Ajax響應仍然根據其各自的頭文件進行解碼。

+0

只是想知道,你怎麼知道實際的字符集是什麼? (我通常可以通過指定'UTF-8'來解決這些問題。) –

+0

用你的代碼在PHP文件中設置頭文件就是一個竅門!謝謝:) – dukevin

+2

@Jared把它稱爲一個有教養的猜測。 OP聲明瞭ISO-8859-1(無論如何,這個設置在用戶代理中都被Windows-1252覆蓋)。將字符集設置爲與實際數據不符的任何內容都不能解決任何問題,因此只需指定UTF-8就不會奇蹟般地使其正常工作。 – Tomalak

3

您的頁面返回text/htmlContent-Type,因此瀏覽器(和ajax腳本)使用當前上下文給出的默認編碼來解釋它們。

在php中,您可以使用header函數爲html版本強制編碼,您應該使用apache配置文件(假設您使用apache,否則請參閱您的web服務器文檔)。

http://www.w3.org/International/O-HTTP-charset

這是永遠標籤網頁文件明確很重要的。 HTTP 1.1表示默認字符集是ISO-8859-1。但在其他編碼中也有許多未標記的文檔,因此當沒有明確的字符集參數 參數時,瀏覽器使用 閱讀器的首選編碼。

在同一頁面

阿帕奇。這可以通過AddCharset(Apache 1.3.10和更高版本) 或AddType指令,目錄或單個資源 (文件)完成。使用AddDefaultCharset(Apache 1.3.12和更高版本),可以設置整個服務器的默認字符集。欲瞭解更多 信息,請參閱Setting 'charset' information in .htaccess.