1. 程式人生 > >PHP 頁面編碼宣告方法詳解(header或meta)

PHP 頁面編碼宣告方法詳解(header或meta)

一、頁面編碼

1. 使用 <META http-equiv="content-type" content="text/html; charset=xxx"> 標籤設定頁面編碼

這個標籤的作用是宣告客戶端的瀏覽器用什麼字符集編碼顯示該頁面,xxx可以為GB2312,GBK,UTF-8(和MySQL不同,MySQL是 UTF8)等等。因此,大部分頁面可以採用這種方式來告訴瀏覽器顯示這個頁面的時候採用什麼編碼,這樣才不會造成編碼錯誤而產生亂碼。但是有的時候我們會 發現有了這句還是不行,不管xxx是哪一種,瀏覽器採用的始終都是一種編碼,這個情況我後面會談到。

請注意,<meta>是屬於html資訊的,僅僅是一個宣告,它起作用表明伺服器已經把HTML資訊傳到了瀏覽器。

2. header("content-type:text/html; charset=xxx");

這個函式header()的作用是把括號裡面的資訊發到http標頭。

如果括號裡面的內容為文中所說那樣,那作用和<META>標籤基本相同,大家對照第一個看發現字元都差不多的。但是不同的是如果有這段 函式,瀏覽器就會永遠採用你所要求的xxx編碼,絕對不會不聽話,因此這個函式是很有用的。為什麼會這樣呢?那就得說說HTTPS標頭和HTML資訊的差 別了:

https標頭是伺服器以HTTP協議傳送HTML資訊到瀏覽器前所送出的字串。

因為meta標籤是屬於html資訊的,所以header()傳送的內容先到達瀏覽器,通俗點就是header()的優先順序高於meta(不知道可 不可以這樣講)。加入一個php頁面既有header("content-type:text/html; charset=xxx"),又有<META http-equiv="content-type" content="text/html; charset=xxx">,瀏覽器就只認前者http標頭而不認meta了。當然這個函式只能在php頁面內使用。

同樣也留有一個問題,為什麼前者就絕對起作用,而後者有時候就不行呢?這就是接下來要談的Apache的原因了。

3. AddDefaultCharset

Apache 根目錄的 conf 資料夾裡,有整個Apache的配置文件httpd.conf。

用文字編輯器開啟httpd.conf,第708行(不同版本可能不同)有AddDefaultCharset xxx,xxx為編碼名稱。這行程式碼的意思:設定整個伺服器內的網頁檔案https標頭裡的字符集為你預設的xxx字符集。有這行,就相當於給每個檔案都 加了一行header("content-type:text/html; charset=xxx")。這下就明白為什麼明明meta設定了是utf-8,可瀏覽器始終採用gb2312的原因。

如果網頁裡有header("content-type:text/html; charset=xxx"),就把預設的字符集改為你設定的字符集,所以這個函式永遠有用。如果把AddDefaultCharset xxx前面加個“#”,註釋掉這句,而且頁面裡不含header("content-type…"),那這個時候就輪到meta標籤起作用了。

總結: