`

IE中打开UTF-8编码title为中文的网页会显示空白页

    博客分类:
  • C#
阅读更多

做网站时候遇到这个问题,自己解决了!,留下来也许别人也有这个问题先附上一个简单的解决办法:在网页文件的<head></head>标签中一定要把字符定义
<meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ />
放在<title></title>之前。
原因就是ie的不标准引起的,所以在所有以ie为内核的浏览器中都由这个问题。
很久很久以前(大概2005年10月~2006年3月),当时在blogger.com写Blog。当时blogger.com有中文界面,对中文用户也算是比较关心了,不过blogger.com的所有模版里都有一个问题,那就是<title>标签被放在<meta>标签前面。当title为中文的时(比如Blog名为中文或者文章标题为中文),在IE下会出现显示空白页的问题。昨天Dre·J在群里又问到这个问题,今天过来好好研究一下。
这个问题只存在于blogger.com中,WordPress系统中不存在。先说一下在blogger.com中这个问题的解决办法:在模版的<body>标签下面找到<title>标签,调整成这样:
<$BlogMetaData$> <title><$BlogPageTitle$></title>
保证meta在前面就可以了。可以参考《感谢Yskin》和《UTF-8字符集网页在IE上会显示空白问题的解决方案》。
这个问题要从浏览器解析html的方式讲起。浏览器读取了页面的html代码后开始进行解析。解析前浏览器要先知道页面的编码方式,然后根据编码方式进行解码,然后才能开始解析。我大概想了一下,浏览器可以从下面3个方面得到页面编码方式:HTTP Header中的”Content-Type”项、返回的html代码开头是否有BOM、html代码中的meta标签。
做了一个小测试,使用Windows 2000 SP4操作系统,IE6 SP1和Firefox 1.5.0.5浏览器。所有文件使用DOS格式换行符。测试代码如下:
<?php header(”Content-Type: text/html; charset=utf-8″); ?><html> <head> <meta http-equiv=”Content-Type” content=”text/html; charset=UTF-8″ /> <title>你好啊</title> </head> <body> 你好啊。 </body>
先不要前面的PHP语句,直接使用html文件,分无meta、meta在title前、meta在title后3种方式,分别做成GBK、UTF-8(no BOM)、UTF-8(BOM)三种编码方式的文件,再分别用IE和Firefox测试。我的Blog所在的服务器上,访问html文件时HTTP Header里Content-Type是Content-Type: text/html。第二遍测试加上PHP语句,用Header函数给HTTP Header中加上Content-Type: text/html; charset=utf-8,再把第一遍做的重新做一遍。
IE6 SP1
Firefox 1.5.0.5
字节
地址
无meta
GBK
正常
正常
73
t11.html
UTF-8(no BOM)
空白页
使用GBK解码形成乱码
80
t12.html
UTF-8(BOM)
正常
正常
83
t13.html
meta在前
GBK
使用UTF-8解码形成乱码
使用UTF-8解码形成乱码
144
t21.html
UTF-8(no BOM)
正常
正常
151
t22.html
UTF-8(BOM)
正常
正常
154
t23.html
meta在后
GBK
使用UTF-8解码形成乱码
使用UTF-8解码形成乱码
144
t31.html
UTF-8(no BOM)
空白页
正常
151
t32.html
UTF-8(BOM)
正常
正常
154
t33.html
—加了Header语句后—
无meta
GBK
使用UTF-8解码形成乱码
使用UTF-8解码形成乱码
133
t11.php
UTF-8(no BOM)
正常
正常
140
t12.php
UTF-8(BOM)
正常
正常
143
t13.php
meta在前
GBK
使用UTF-8解码形成乱码
使用UTF-8解码形成乱码
204
t21.php
UTF-8(no BOM)
正常
正常
211
t22.php
UTF-8(BOM)
正常
正常
214
t23.php
meta在后
GBK
使用UTF-8解码形成乱码
使用UTF-8解码形成乱码
204
t31.php
UTF-8(no BOM)
正常
正常
211
t32.php
UTF-8(BOM)
正常
正常
214
t33.php
文件中有6个汉字和一个汉字句号,所以UTF-8(no BOM)格式比GBK格式多出7个字节。UTF-8的BOM占用3个字节,所以UTF-8(BOM)比UTF-8(no BOM)多出3个字节。经验证,所有数据都符合这个规则,所以各文件格式没有错误。
PHP不支持BOM,又因为BOM的3个字符在最前面,显示不包含在<?php…?>标签里,所以PHP引擎会3个字符输出,于是输出的html文件也有了BOM。所以这次测试中,为了修改http header而加入的PHP语句不影响最终输出的html文件的BOM。
从测试结果可以看出,浏览器(无论是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解析过程,返回到解码步骤重新解码。
知道了这个步骤,再来看这个表:在加了Header语句设置了HTTP Header后,两个浏览器解析所有页面都是用的UTF-8方式,包括GBK编码的页面。(当然要正常解析GBK编码的文件,可以在title前加上个meta标签标明编码方式。)在上表的下半部分可以清楚的看到这一点。再来看上半部分,在没有加Header语句的页面里,首先浏览器认定页面编码方式为默认值GBK。检测有无UTF-8的3字节BOM,检测到的,认定页面编码方式为UTF-8,解码再解析html,一切正常。如上表所示,上半部分带BOM的页面都能正常显示。如果没有BOM,页面可能是GBK或者UTF-8(no BOM)格式,浏览器会先按照默认的GBK方式开始解码。页面为GBK格式时,无meta时正常,有meta时浏览器解析到meta标签会回头重现按UTF-8方式解码,所以GBK,meta在前或后,无论IE还是FF都是乱码。再看UTF-8(no BOM)的页面,无meta时FF用GBK方式解码下去,最终显示乱码,IE则解码出错,形成空白页。有meta时,Firefox找到meta后回头重新按UTF-8方式解码,所以无论meta在前或在后都是正常;IE则是在meta在前时能够和Firefox一样回头重新解码,当meta在后时,又是解析到title出错,返回空白页。
所以,IE显示空白页的问题,很明显是因为IE的解码程序兼容性差。上网查了下,GBK的编码范围是0×8140-0xfefe。从GB2312-80开始,因为ASCII码的范围是0~127,首字位是0,所以GB2312-80使用双字节,并设置首字位为1。“GBK 亦采用双字节表示,总体编码范围为 8140-FEFE,首字节在 81-FE 之间,尾字节在 […]

分享到:
评论

相关推荐

    php_web项目中utf-8的问题.do

    将文件从其他编码格式转换为UTF-8时,可能会在文件开头自动生成一个BOM(Byte Order Mark)标记。BOM标记可能导致浏览器在显示中文时出现乱码。移除BOM标记的方法包括: - 使用Dreamweaver打开文件并重新保存; -...

    Web开发关于UTF-8的问题总结.docx

    在Web开发中,UTF-8编码是一个至关重要的概念,它是一种广泛使用的字符编码标准,能够支持全球大部分语言的字符表示。以下是对Web开发中遇到的UTF-8问题的详细总结: 1. HTML页面转UTF-8编码问题: - 在HTML文件的...

    gbk utf8如何选择 正确理解和使用GBK及UTF-8网页编码

    在Windows环境下使用Internet Explorer(IE)浏览器时,由于IE在解析UTF-8编码的网页时可能会出现问题,尤其是在页面`&lt;title&gt;`标签内有奇数个全角字符时。这是因为IE解析时优先考虑HTML内的编码标签,而非HTTP头部...

    PHP UTF-8 等宽度截取中英文字符.txt

    对于UTF-8编码的字符串来说,由于不同字符(如中文、英文等)在UTF-8编码下占用的字节数不同,简单的按字节长度进行截取往往会导致乱码或者截取不准确。因此,需要一种能够等宽度截取中英文字符的方法。 #### 二、...

    Access数据库中UTF-8转GB2312的方法

    在实际工作中,我们经常会遇到不同编码格式的数据文件,特别是在处理中文字符时,由于不同的编码方式会导致显示异常,因此掌握如何进行编码转换是非常重要的技能之一。本文主要介绍如何将UTF-8编码的Access数据库...

    HTML5 UTF-8 中文乱码的解决方法

    1. **源文件编码不匹配**:当你在文本编辑器(如记事本)中创建HTML文件并使用UTF-8编码保存,但文件实际被以其他编码(如GBK或GB2312)打开时,就会出现乱码。记事本默认可能会将新文件保存为ANSI编码,这与UTF-8不...

    Web 开发中遇到的UTF-8编码的问题总结第1/2页

    为了在MySQL数据库中正确存储和检索UTF-8编码的中文字符,需要将数据库的编码设置为UTF-8。通常,这涉及到修改数据库的字符集设置,确保表和字段的字符集均为UTF-8。不正确配置的数据库会导致中文字符显示错误。 第...

    utf-8 网页不显示+utf-8网页乱码的通用解决方法

    综上所述,解决UTF-8编码网页不显示和乱码问题的方法需要从客户端和服务器端两方面来考虑。客户端方面应关注浏览器设置,而服务器端则需重视程序编码设置、文件保存格式以及程序代码的正确性。通过这些方法的综合...

    freemarker入门实例(解决乱码eclipse/java/编码方式UTF-8)

    在Eclipse中,确保项目属性设置中的源文件编码和输出文件编码都设置为UTF-8。如果遇到乱码问题,检查以下几个方面: - 模板文件的编码是否为UTF-8。 - Java代码中指定的编码是否正确,如`cfg.setDefaultEncoding(...

    源代码-CMS ASP网站管理系统UTF-8.zip

    在ASP中,使用UTF-8编码可以确保网页能正确显示各种语言的文字,特别是对于非英文字符,如中文、日文、韩文等。 为了在ASP中使用UTF-8编码,你需要在页面顶部指定正确的MIME类型和字符集,例如: ```html ; ...

    EL中文显示乱码的解决办法

    - 日志框架如Log4j、Logback的日志配置文件也要指定UTF-8编码,确保日志中的中文字符能正常显示。 通过以上步骤,大部分EL中文显示乱码的问题都能得到解决。如果问题依然存在,可能需要进一步排查其他潜在因素,如...

    php的mail函数发送UTF-8编码中文邮件时标题乱码的解决办法

    对于UTF-8编码的标题,可以使用`base64_encode()`函数编码标题文字,然后在`headers`中设置为`=?UTF-8?B?...?=`的形式。 3. **headers中的`Content-Type`设置**: 在邮件的headers中,`Content-Type`字段应当指定...

    网站开发中遇到UTF8出现乱码问题.pdf

    网站开发过程中,尤其是在进行国际化的过程中,常常会遇到UTF-8编码相关的乱码问题。这些问题主要集中在以下几个方面: 一、HTML页面转UTF-8编码问题 1. 首先,需要在HTML文档的部分,&lt;title&gt;标签之前添加标签来...

    网站开发中遇到UTF8出现乱码问题.docx

    UTF-8编码因其广泛支持和兼容性成为了国际化的首选,但转换过程中的不彻底或者忽视某些细节往往会导致乱码问题。以下是针对网站开发中遇到的UTF-8乱码问题的详细分析和解决方案: 一、HTML页面转UTF-8编码问题: 1....

    ASP UTF-8编码下字符串截取和获取长度函数

    在ASP (Active Server Pages) 开发环境中,处理UTF-8编码的字符串时,通常需要特别注意,因为UTF-8是一种多字节字符编码,每个字符可能由1到4个字节组成。传统的字符串操作函数在处理UTF-8时可能会出现问题,比如...

    javascript经典特效---title显示日期.rar

    首先,HTML中的`&lt;title&gt;`属性通常用于设置网页的标题,显示在浏览器的标签页上。然而,我们可以为HTML元素添加一个额外的`title`属性,当鼠标悬停在该元素上时,浏览器会显示这个属性的值作为提示信息。例如,我们...

    解决jsp中文乱码问题(转)

    每个网页都有一个编码标准,例如GBK或UTF-8,用于解释页面中的字符。为解决这个问题,可以在JSP页面的顶部添加`; charset=gb2312"%&gt;`指令,明确指定页面的字符集。这样做可以确保浏览器以正确的编码解析页面内容,如...

    PHP WEB 开发乱码问题总结

    如果文件当前是ANSI编码,需要将其转换为UTF-8。 3. **BOM标签问题**:转换编码时可能会在文件开头生成一个不可见的BOM(Byte Order Mark)标记。BOM标记可能导致浏览器解析中文字符时出现问题。可以通过以下几种...

    LAMP内容总结

    ### LAMP架构下的UTF-8编码管理:全面解析与实践指南 #### 一、HTML页面转UTF-8编码详解 在LAMP(Linux, Apache, MySQL, PHP)环境中,正确处理UTF-8编码至关重要,尤其是在多语言网站开发中。HTML页面的UTF-8编码...

Global site tag (gtag.js) - Google Analytics