找回密码
 注册

QQ登录

只需一步,快速开始

搜索
查看: 1630|回复: 0

utf-8网页在ie下显示空白的解决方法

[复制链接]
vistafans 发表于 2008-5-10 09:53:34 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有账号?注册

×
这个问题要从浏览器解析html的方式讲起。浏览器读取了页面的html代码后开始进行解析。解析前浏览器要先知道页面的编码方式,然后根据编码方式进行 解码,然后才能开始解析。我大概想了一下,浏览器可以从下面3个方面得到页面编码方式:HTTP Header中的"Content-Type"项、返回 的html代码开头是否有BOM、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解析过程,返回到解码步骤重新解码。

知道了这个步骤,再来看这个表:在加了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出错,返回空白页。

所以有必要将

<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />

写在title前面
论坛发展靠大家,积极提供资源;请勿灌水
通过分享您的互联网来赚钱
您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|手机版|小黑屋|存档|商匡数科 ( 沪ICP备19008575号-1 )

GMT+8, 2024-10-4 11:46 , Processed in 0.046498 second(s), 20 queries .

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表