如何讓瀏覽器正確識別網頁編碼

如何讓瀏覽器正確識別網頁編碼   
2009-05-26 16:16:57|  分類: php |  標籤: |字號大中小 訂閱  
一般在網頁中都要有如下一句: 
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">  
這樣的字句,指示此網頁的字符集編碼是GB2312  
但有時候瀏覽器並不能正確識別。  
那就需要再加一句: 
header("Content-Type: text/html;charset=gb2312");  
這樣一般來說就能讓流利正確識別了。 
1、數據庫採用UTF8編碼,而頁面申明編碼是GB2312,這是最常見的產生亂碼的原因。這時候在PHP腳本里面直接SELECT數據出來的就是亂碼,需要在查詢前先使用:  
mysql_query("SET NAMES GBK"); 
來設定MYSQL連接編碼,保證頁面申明編碼與這裏設定的連接編碼一致(GBK是GB2312的擴展)。如果頁面是UTF-8編碼的話,可以用: mysql_query("SET NAMES UTF8");  
2、頁面申明編碼與文件本身編碼不一致,這種情況很少發生,因爲如果編碼不一致美工做頁面時候在瀏覽器看到的就是亂碼了。更多時候是發佈以後修改一些小BUG,以錯誤編碼打開頁面然後保存導致的。或者是用某些FTP軟件直接在線修改文件,比如CuteFTP,由於軟件編碼配置錯誤而導致轉換錯了編碼。 3、一些租用虛擬主機的朋友,明明上述3項編碼都設置正確了還是有亂碼。比方說網頁是GB2312編碼的,IE等瀏覽器打開卻總是識別成UTF-8,網頁HEAD裏面已經申明是GB2312了,手動修改瀏覽器編碼爲GB2312後頁面顯示正常。產生原因是服務器Apache設定了服務器全局的默認編碼,在httpd.conf裏面加了AddDefaultCharset UTF-8。這時候服務器會首先發送HTTP頭給瀏覽器,其優先級比頁面裏申明編碼高,自然瀏覽器就識別錯了。解決辦法有2個,請管理員在配置文件自己的虛機里加上一條AddDefaultCharset GB2312來覆蓋全局配置,或者在自己目錄的.htaccess裏配置。 
   但是,我發現以上的辦法並不全面,尤其是第三點。經過研究,如果apache服務器設定了默認不是gb2312的編碼,我們還是可以用
@header("Content-Type: text/html; charset=utf-8")語句來聲明編碼類型。 
  




   2014年執業醫師考試指導  臨牀執業醫師  口腔執業醫師  中醫執業醫師  醫科大考查課試題    
 




在windows操作系統上使用IE作爲瀏覽器時。常常會發生這樣的問題:在瀏覽使用UTF-8編碼的網頁時,瀏覽器無法自動偵測(即沒有設定“自動選擇”編碼格式時)該頁面所用的編碼。即使網頁已經聲明過編碼格式:  
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />  // php 用 header("Content-Type:text/html;charset=UTF-8"); ,由此造成某些含有中文UTF-8編碼的頁面產生空白輸出。  
如果使用的是Mozilla、Mozilla Firefox、Sarafi的瀏覽器這不會造成這個問題。這是由於IE解析網頁編碼時以HTML內的標籤優先,而後纔是HTTP header內的訊息;而mozilla系列的瀏覽器則剛剛相反。  
由於UTF-8爲3個字節表示一個漢子,而普通的GB2312或BIG5是兩個。頁面輸出時,由於上述原因,使瀏覽器解析、輸出<title></title>的內容時,如果在</title>前有奇數個全角字符時,IE把UTF-8當作兩個字節解析時出現半個漢字的情況,這時該半個漢字會和</title>的<結合成一個亂碼字,導致IE無法讀完<title>部分,使整個頁面爲空百輸出。而這個時候如果察看源文件的話,會發現實際上整個葉面全部已經輸出了。  
因此最簡單的解決辦法是再網頁文件的<head></head>標籤中一定要把字符定義<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> 放在<title></title>之前.
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章