<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 431,  comments - 344,  trackbacks - 0
    當頁面使用 utf-8 編碼時,
      <title>標簽被放在<meta>標簽前面。當title為中文的時(比如Blog名為中文或者文章標題為中文),在IE下會出現顯示空白頁的問題。
      
      由于 utf-8 使用3個字節表示一個漢字,而GB2312或BIG5使用兩個字節。頁面輸出時,由于上述原因,使瀏覽器解析、輸出<title> </title>的內容時,如果在</title>前有奇數個全角字符時,IE把 UTF-8 當作兩個字節解析時出現半個漢字的情況,這時該半個漢字會和</title>的<結合成一個亂碼字,導致IE無法讀完<title>部分,致使整個頁面為空百輸出。此時查看源文件,會發現實際上整個頁面全部已經下載了。
      
      而瀏覽器解析html的方式是:瀏覽器讀取了頁面的html代碼后開始進行解析。解析前瀏覽器要先知道頁面的編碼方式,然后根據編碼方式進行解碼,然后才能開始解析。
      瀏覽器可以從下面3個方面得到頁面編碼方式:
      HTTP Header中的"Content-Type"項;
      返回的html代碼開頭是否有BOM(Byte Order Mark);
      html代碼中的meta標簽。
      
      瀏覽器(無論是IE還是Firefox)在解析頁面時,首先取HTTP Header中的Content-Type項,如果有寫明charset的話就認定頁面的編碼方式為charset指定的值。如果沒有指明,則認定為默認值。根據上表,IE中文版的默認值是GB2312,Firefox中文版的默認值是GBK,不過IE的GB2312好像和GBK沒啥區別。然后,瀏覽器會看一下有沒有BOM。一旦發現有UTF-8的3字節BOM,則重新認定頁面的編碼方式為UTF-8。
      
      解碼階段,解碼完成后是解析html的階段。解析html的過程中,當解析到head部分的meta標簽時,瀏覽器會根據<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />這個語句中的說明,重新認定編碼方式為charset后面的方式,中斷html解析過程,返回到解碼步驟重新解碼。
      
      GBK 和 UTF-8 的編碼范圍:
      GBK的編碼范圍是0×8140-0xfefe。從GB2312-80開始,因為ASCII碼的范圍是0~127,首字位是0,所以GB2312-80使用雙字節,并設置首字位為1。“GBK 亦采用雙字節表示,總體編碼范圍為 8140-FEFE,首字節在 81-FE 之間,尾字節在 40-FE 之間。”
      
      UTF-8中中文都是3個字節的,由于Unicode中中日韓的文字都混在一起,可以使用Windows自帶的字符映射表查看CJK表意字符的范圍,即為漢字的范圍。3字節的UTF-8編碼是:1110xxxx 10xxxxxx 10xxxxxx,編碼范圍是8000-EFFF,首字節在80-EF之間,尾字節在00-FF之間。
      
       顯然當一段UTF-8編碼的文本被按照GBK方式解碼的時候,由于有一些編碼在GBK中不存在,造成解碼程序出現錯誤。當UTF-8文本被按照GBK的方式解碼的時候,前兩個字節會被認為是一個字,后一個字節將和下一個字符結合。當<title>標簽里的漢字數是偶數個時,勉強有3/4的概率通過解碼程序(因為GBK的第二個字節要求是40-FE),當有奇數個漢字的時候,最后一個漢字的三個字節的最后一個字節會和< /title>的第一個字符<結合,而<的編碼是3C,正好不在尾字節40-FE的范圍中,造成錯誤。如果< /title>標簽前有多余的空格也會產生錯誤,因為空格的編碼20也不在范圍中。
      
      meta 標簽的作用:詳細請看 《HTML中meta的作用》
      “meta是用來在HTML文檔中模擬HTTP協議的響應頭報文。”在meta標簽中寫和在HTTP頭里寫是一樣的,這也是為了解決用普通HTML寫網頁的人無法自行定義HTTP頭的問題。但是,meta是一個html標簽,所以必須進入到html解析的步驟才能生效,而生效后,瀏覽器會退回幾步,重新設置好HTTP頭從頭再開始解碼、解析html。所以meta中寫的內容會覆蓋HTTP頭里的內容,無論哪個瀏覽器都是這樣的。
      
      出現空白頁必須的3項條件:
      1.title標簽里的內容為中文其他雙字節字符;
      2.指定網頁編碼的 meta 信息在 title 標簽的下方;
      3.另存或轉換utf-8編碼時沒有包括 unicode 簽名。
      
      BOM (Byte Order Mark,字節序標識)的作用:
      用于UTF-16編碼的文件,在UTF-8編碼的文件中不需要標識字節序,所以被用來標識這是一個UTF-8編碼文件。
      
      這個問題還是IE的兼容性問題,在解碼的時候如果遇到錯誤的編碼就中斷解碼。
      這個是IE的bug,不過也不要認為你用的是MyIE、MyIE2、遨游Maxthon、GreenBrowser、騰訊TT就不會受到影響。Firefox或者Opera就更不會了。
      
      解決辦法:
      utf8頁面應該使用標準順序
      <meta http-equiv=”content-type” content=”text/html; charset=UTF-8″ />
      <meta http-equiv=”content-language” content=”zh-CN” />
      <meta name=”robots” content=”index,follow” />
      <meta name=”keywords” content=”" />
      <meta name=”description” content=”" />
      <meta name=”rating” content=”general” />
      <meta name=”author” content=”" />
      <meta name=”copyright” content=”" />
      <meta name=”generator” content=”" />
      <title></title>
      
      參考文章:
      http://hewei.org/website-research/shtml-utf8-bom/ shtml調用在utf8編碼下多出空行的問題(解決)
      IE中打開UTF-8編碼title為中文的網頁會顯示空白頁的問題 (文中大部分是這里的觀點)
        做人要厚道,請注明轉自酷網動力(www.ASPCOOL.COM)。
    posted on 2008-02-29 17:31 周銳 閱讀(1058) 評論(0)  編輯  收藏 所屬分類: HTMLJsp
    主站蜘蛛池模板: 久久亚洲色一区二区三区| 四虎永久在线免费观看| 亚洲成a人片在线观看中文动漫| 一级毛片a免费播放王色电影| 免费在线观看的黄色网址| 国产亚洲精品成人久久网站| 国产三级免费电影| 无码毛片一区二区三区视频免费播放| 免费日本黄色网址| 国产免费久久精品丫丫| 亚洲国产精品久久久久婷婷软件| 小日子的在线观看免费| 亚洲精品美女在线观看| 好爽又高潮了毛片免费下载| 亚洲av永久无码天堂网| 国产亚洲精品不卡在线| 久久一本岛在免费线观看2020| 亚洲毛片免费视频| 日韩精品免费一区二区三区| 免费一区二区无码视频在线播放| 亚洲伊人成无码综合网| 97公开免费视频| 亚洲精品中文字幕| 亚洲中文字幕久久精品无码喷水| 日韩精品无码一区二区三区免费| 亚洲乱码卡一卡二卡三| 免费人成在线观看视频播放| 日本高清不卡aⅴ免费网站| 亚洲国产高清在线精品一区| 国产一级淫片免费播放电影| 免费成人在线视频观看| 亚洲熟妇无码一区二区三区 | 久久久久久久国产免费看| 亚洲高清国产拍精品26U| 97视频热人人精品免费| 51午夜精品免费视频| 亚洲国产日韩在线成人蜜芽| 青青青国产色视频在线观看国产亚洲欧洲国产综合 | 男男黄GAY片免费网站WWW| 亚洲成AV人片一区二区| 成人免费无码大片a毛片软件|