2014-01-29 60 views
0

我不得不第一次處理編碼,而且我很困惑PHP,Apache和瀏覽器如何處理編碼。 PHP和Apache默認使用ISO-8859-1,但大多數網站都是UTF-8。 ISO-8859-1在什麼時候轉換爲UTF-8?另外,由於PHP使用ISO-8859-1,它怎樣才能讀取UTF-8網頁?Apache的默認編碼是ISO-8859-1,但網站是UTF-8?

+0

你可以在頁面的標題中定義charcode!檢查頁面標題 –

+0

我是編碼方面的初學者,但我的理解是要更改網頁的編碼,網頁的二進制組成部分必須更改?如果PHP想輸出UTF-8,那麼它不僅僅需要發送HTTP頭或HTML標籤嗎? –

+0

根據你的代碼默認php在php.ini中使用ISO-8859-1,但你可以使用例如header('Content-type:text/html; charset =')來改變輸出或使用meta標籤,html5刪除meta標籤編碼 –

回答

0

Apache默認不會「使用」任何編碼,它的工作幾乎與理解或轉換文本編碼有關。 PHP默認不會「使用」ISO-8859,PHP的字符串沒有相關的編碼。

什麼是真實的是,許多PHP的核心字符串函數在其操作中假定爲 ASCII或ISO-8859編碼,並且沒有配備正確處理其他編碼。然而,值得再次說明的是,作爲數據類型的PHP字符串本身沒有任何編碼,沒有什麼能阻止你在PHP中使用任何編碼的字符串,甚至PHP也提供了正確處理字符串操作的函數任何任意編碼。所以,只要你做得對,沒有什麼能阻止你用PHP處理和輸出UTF-8。

然後,Apache並不在乎你發送給客戶端的是什麼,它在任何編碼(或二進制數據)方面都不以任何人的方式支持。它可以做的唯一的事情就是這樣添加的HTTP標頭到響應:

Content-Type: text/html; charset=iso-8859-1 

這個頭只存在告知收到什麼樣的內容客戶端。這個頭文件不是基於你發送的實際內容,Apache既不關心也不檢查也不轉換任何東西。它只是設置這個標題,這就是它的全部。您應該配置Apache以設置與您實際從PHP輸出的編碼相對應的正確charset值,其默認值僅爲iso-8859-1。或者你可以從PHP設置一個Content-Type頭文件來阻止Apache添加頭文件。就這樣。

欲瞭解更多信息,請參閱What Every Programmer Absolutely, Positively Needs To Know About Encodings And Character Sets To Work With Text,Handling Unicode Front To Back In A Web App

相關問題