2012-03-01 133 views
1

我有以下問題: 我有一個窗體,通過GET特殊字符接收。它讀取它們,然後用這些字符填充字段。 我的<meta http-equiv="content-type" content="text/html;charset=utf-8" />插在<head>的正下方。 所有的東西在FF中都很完美,但是在IE中這些字符已經搞亂了,而我卻得到了所有這些符號。 然而,在IE瀏覽器中,如果我右鍵單擊頁面,並在編碼下將UTF-8更改爲西歐(Windows),則這些字符將正確顯示。 我也嘗試在我的Apache conf文件中添加AddDefaultCharset Off,以確保Web服務器不覆蓋字符集編碼。 奇怪的是,如果在我的代碼中,我使用PHP的htmlentities,那麼文本在IE中正確顯示,但在FF中錯誤。UTF 8編碼工作在FF但在IE中不工作

除此之外,我用firebug和開發者工具來看看GET數據是如何傳遞的,看起來在FF中特殊字符被轉換爲:B6%C3%A4%C3%BC%C3%9F%C3%96%C3%84%C3%9C%20IT%20%C3%A0%C3%A8%C3%AC%C3%B2%C3%B9%20,但在IT中GET數據顯示爲àéèâêîôûœïç

任何人都可以幫助我嗎?它開始變得非常令人沮喪,不能在FF和IE中找到方法。

回答

0

你說你有GET的URL像

emeasmartportal.com/sbso/index-test.php?fname=àéèâêîôûœïç 

它看起來像ythe問題是輸入GET數據本身的麻煩:因爲他們必須編碼它纔可以知道什麼字符集響應頁面具有,瀏覽器對該數據使用不同的默認編碼。 Firefox似乎默認使用UTF-8(請參閱例如此錯誤報告)。 IE似乎沒有那樣做。

我認爲你需要做的是使用mb_detect_encoding()來檢測傳入的數據是IS-8859-1還是UTF-8。 (這種特殊情況下,可以使用該功能來可靠地檢測。)

如果傳入的數據是ISO-8859-1(你可以使用mb_detect_encoding檢測可靠),你需要將其轉換:

iconv("iso-8859-1", "utf-8", $data) 

如果它已經是UTF-8,你不知道。

應該工作,但沒有保證。當您不確定傳入的編碼時,編碼問題可能會變得很糟糕。

+0

也許我只是愚蠢的,但例如,在螢火蟲我不怎麼或在哪裏可以看到我的服務器發送的字符集頭。我看到的是:Content-Type \t text/html,Transfer-Encoding \t chunked,Accept-Encoding gzip,deflate,Accept-Language \t zh-cn,en; q = 0.5。我在Windows Server 2008上使用Apache 2.2。 – 2012-03-01 10:46:22

+0

@Mihai奇怪,看起來沒問題。你可以顯示一個實時鏈接嗎? – 2012-03-01 10:49:26

+0

http://emeasmartportal.com/sbso/index-test.php?fname=FRàéèêêôôôôôôôéDEöäßßeÜITàèìòùESñáéíóú&lname = FRàéèâôôôôôôôéDEöäüßÖÄÜITàèìòùESñáéíóú&cid = 1-1Q9-2406&coid = 1-10EXOC&partname = FRàéèâêêîôûœœçDE如果你打開這個鏈接,fname參數將在FF中正確顯示,但是在IE中是錯誤的(我沒有對它進行任何編碼/解碼)。 lname會在IE中正確顯示,但在FF中錯誤(我正在做GET數據的性能) – 2012-03-01 11:08:35

相關問題