- 浏览: 351563 次
- 性别:
- 来自: 上海
-
文章分类
- 全部博客 (139)
- Java (49)
- C# (23)
- 软件实施 (1)
- Mysql (8)
- Struts2&1.x (15)
- DWR (0)
- Javascript (7)
- Effective Java (8)
- Oracle (0)
- SqlServer (1)
- Spring (6)
- 数据结构 (2)
- 设计模式 (0)
- Hibernate (6)
- c++ (2)
- Qt (1)
- 瞎侃几句 (5)
- Openbravo2.5实施记录 (3)
- 工作总结 (6)
- 软件测试 (3)
- css (1)
- Android (13)
- Object-c (0)
- Html5 (1)
- jshoper开源项目 (34)
- Windows Phone (1)
- activiti (2)
最新评论
-
yzlseu:
没有思考,就是抄的,垃圾文章
Activiti5用户手册---Message Event Definitions -
yy756127197:
<timeDuration>P10D</ti ...
Activiti5用户手册---Events---Timer Event Definitions -
云端帕帕:
Activiti5用户手册---Events---Timer Event Definitions -
raychiong:
lz现在哪里高就呢?
记录一次高德软件面试经历 -
sdywcd:
water_quite 写道sdywcd 写道water_qu ...
jshoper3x在线商城系统更新说明及未来开发计划
做网站时候遇到这个问题,自己解决了!,留下来也许别人也有这个问题先附上一个简单的解决办法:在网页文件的<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 之间,尾字节在 […]
发表评论
-
无法卸载VS2008(转)
2010-09-01 15:28 2140电脑上的VS2008无法卸载掉!在控制面板的添加/删除程序中, ... -
配置php请参看
2010-09-01 15:08 976http://hi.baidu.com/cnalanhu/bl ... -
针对 Windows 2003 操作系统的服务优化方案!
2010-08-29 13:48 1061以下这种方案是针对 Windows 2003 并装有 IIS ... -
用ie读取asp文件空白和在win2003上的增加xml节点问题
2010-08-25 14:15 11921,最近用ie打开asp的时候总是空白? 发现问题是这样的 ... -
Gridview控件合并tr和td显示数据解决方法
2010-07-19 23:19 1850Gridview控件合并tr和td显示数据解决方法 ... -
SVN版本控制服务器和客户端安装教程
2010-07-19 13:00 1803ps:有些问题的分来还真 ... -
在.NET环境中使用单元测试工具NUnit
2010-06-12 14:54 1071文章转载至http://www.iwms.net/n2140c ... -
webBrowser调用外部js文件和js函数
2010-05-10 19:09 7133webbrowser加载外部html文件和外部js文 ... -
SendKeys.SendWait()用法
2010-05-10 18:32 14118此方法是模拟键盘的,所以必须传入键盘数据。 Send ... -
虚拟键值表
2010-05-10 17:03 2368http://blog.csdn.net/movayhust/ ... -
vs2003web项目到vs2008的升级注意点
2009-11-22 17:28 1829在vs2003下的web项目中如果移植到vs2008中,出现了 ... -
webbrower控件的使用
2009-11-14 16:09 1460在用webbrowers控件做脚本注册的时候,如果需要循环执行 ... -
webbrower控件中获取button中的value属性值
2009-11-07 15:51 1245mshtml.HTMLInputElementC ... -
如果webbrowser控件出现了假登录现象怎么办
2009-10-28 15:51 1277使用webbrowser.url.toString()方法获取 ... -
webbrowser控件对于获取没有id,没有name的值
2009-10-28 15:49 2339有些时候这个东西就是烦人啊。写个input没有id,没有nam ... -
webbrowser控件在获取html文本编辑器内容的一点代码
2009-10-27 20:48 1890tag.Document.Window.Frames[0 ... -
输入三个数字,比较大小
2007-03-13 20:37 2203以上为c++的编写方法,实现输入的整数按照大小排序 #inc ... -
打印Fibonacci数列的前20个数
2007-05-04 16:25 2102/*打印Fibonacci数列的前20个数*/#include ... -
冒泡法排序
2007-05-04 16:26 1093/*冒泡法排序*/ #include<iostream ... -
用类输入学生信息计算成绩
2007-05-31 12:02 1551#include<iostream.h>#incl ...
相关推荐
在处理UTF-8编码的网页时,可能会遇到网页不显示或显示乱码的问题。这些现象可能是由于客户端浏览器设置不当,或是服务器端的编码设置不正确所引起的。以下,我们将详细介绍几种通用的解决方案: 首先,针对浏览器...
当UTF-8编码的页面在IE7中解析时,如果`<title>`标签内部存在奇数个全角字符(每个全角字符在UTF-8中占3个字节),IE7可能会将其错误地解析为两个字节,导致半个汉字与`</title>`的开始标签"结合,形成乱码,从而...
charset=utf-8`,以确保内容正确编码。 3. **插入具体内容**:将需要保存的网页部分文本插入到新窗口的`<body>`标签内。这一步通常涉及到对原始页面内容的选择和提取,示例中的`a.innerText`表示从某个元素中获取...
- `<meta charset="UTF-8">`: 设置文档的字符编码。 - `<title>`: 定义文档的标题,显示在浏览器标签页的标题栏上。 - **主体内容** (`<body>`): 页面可见内容的容器。 ##### 2. HTML编写规范 - **嵌套规则**: ...
- 必须声明字符编码为UTF-8:`<meta charset="UTF-8">`。 - 引入CSS和JavaScript文件时不指定type,因为它们默认是`text/css`和`text/javascript`。 5. **属性顺序**: - class -> id -> data-* -> src/for/type...