【分享】页面与页面中引入的外部 CSS 文件编码不一致引起的兼容性问题

WebAdvocate 2010-08-27 05:32:32
加精
问题
上周在论坛里发现一个问题,链接地址:http://topic.csdn.net/u/20100822/22 /518c91ea-f3e8-48e8-84b8-286b6639cc8a.html,这个问题看起来很蹊跷,有些CSS起作用了,有些却没有起作用,仔细查了查,问题出在其注释的:“/*列表*/”这里,具体的应该是“列”字这里。
于是乎,我就顺理成章的想到了可能是由编码引起的问题。果不其然……
但是,回来又想,是不是我所解释的,原因是不同浏览器对编码乱的程度不一样呢?原回复在此:
你的页面的编码是 charset=UTF-8
但是你的CSS文件 http://skyming.13.bname.us/question/juzhishe/list.php_files/category.css 的编码是GB2312,而且你的CSS文件里还有中文汉字,所以,页面在编码的时候,你的CSS文件会出现乱码,这时候,各浏览器的处理又有区别,因 此,IE6就挂掉了。
大致测试了一下,bug出在这里:
/*列表*/
解决方法:统一CSS文件和HTML文件的编码格式


后来,又仔细的研究了一下这个问题,不敢私藏,故拿出跟各位共享,判能一起讨论,看正确与否。

现象
例子:
test.html(文件编码为UTF-8):
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
<link rel="stylesheet" type="text/css" href="c.css"/>
<p>内容文本</p>

其中c.css(文件编码为GBK):
p {
height: 115px;
width: 200px;
border: 1px solid red;
}
/*列表*/
p {
background-color: green;
}
以上代码在IE6中运行的截图:

其他浏览器中的截图:


原因
到底是因为什么呢?再看一个测试用例:
test.html (文件为GBK编码)
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
p {
height: 115px;
width: 200px;
border: 1px solid red;
}
/*列表*/
p {
background-color: green;
}
以上代码,可以将GBK转为UTF-8,显示在页面上。
在IE6中,显示出的文本为:
p { height: 115px; width: 200px; border: 1px solid red; } /*??� p { background-color: green; }

其他浏览器中显示:
p { height: 115px; width: 200px; border: 1px solid red; } /*�б�*/ p { background-color: green; }

很明显,IE6中编码的时候,不知道怎么把闭合标签给弄丢了。所以,自他以后的内容都被当作是注释内容,问题就这样出现了。

标准
根据 CSS 2.1 规范的描述,应按照以下优先级来确定一个外部 CSS 文件的编码:
1. HTTP 响应头中 "Content-Type" 字段的 "charset" 参数指定的编码。
2. BOM 以及/或者 @charset 定义的编码。
3. <link charset=""> 或其他链接机制提供的元数据(如果有的话)指定的编码。
4. 引入该 CSS 文件的 HTML 或另一个 CSS 文件(如果有的话)中已确定的编码。
5. 如果以上几步都没能确定编码,则假定其编码为 UTF-8。

关于上述内容的详细信息,请参考 CSS 2.1 规范 4.4 CSS style sheet representation 中的内容。

解决
既然问题是由编码不一致引起的,那么解决方案有二,要么给CSS文件的最前头加一个@charset "GB2312"; 指明CSS文件的编码;要么,创建CSS的时候,让它的编码格式跟页面中指定的相同。

两相权衡,还是第一种解决方案好点儿。

更多兼容性问题:
【分享】浏览器兼容性问题目录
...全文
2928 65 打赏 收藏 转发到动态 举报
写回复
用AI写文章
65 条回复
切换为时间正序
请发表友善的回复…
发表回复
jee147258 2010-09-03
  • 打赏
  • 举报
回复
学习一下
XNightSky 2010-09-03
  • 打赏
  • 举报
回复
<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>
学习!
ml05061232 2010-09-03
  • 打赏
  • 举报
回复
学习了
zhuasanhuang 2010-09-03
  • 打赏
  • 举报
回复
遇到传说的中的有能力的人了~~
lenngy2010 2010-09-02
  • 打赏
  • 举报
回复
看不懂,要好好学习一下了
GlyphVectory 2010-09-02
  • 打赏
  • 举报
回复
你把你的css文件记事本另存为gb2312格式就可以了嘛。。
wangym1985 2010-09-02
  • 打赏
  • 举报
回复
hao
xb2003 2010-09-02
  • 打赏
  • 举报
回复
[Quote=引用 2 楼 suchiheng6 的回复:]
这个干吗的
[/Quote]

在滥竽充数那个帖子中发现了你 哈哈 纠结的头像
wangshijie2019 2010-09-02
  • 打赏
  • 举报
回复
没遇到过
songguojun11 2010-09-02
  • 打赏
  • 举报
回复
支持
支持
支持
支持
liyi1840 2010-09-02
  • 打赏
  • 举报
回复
果然都是高手
yeyinveda 2010-09-01
  • 打赏
  • 举报
回复
有用 支持一下
CGQXYC 2010-09-01
  • 打赏
  • 举报
回复
很好 支持一下
zhongkundehao 2010-08-31
  • 打赏
  • 举报
回复
学习了
hb1106503571 2010-08-31
  • 打赏
  • 举报
回复
学习了!
jianshao810 2010-08-31
  • 打赏
  • 举报
回复
恩。。导链更有用。。
http://topic.csdn.net/u/20100705/09/d270754c-6f5d-4864-84b2-5d4013ca3cd3.html?69487
这个
linwengk 2010-08-31
  • 打赏
  • 举报
回复
学习,挣积分
hml0000 2010-08-31
  • 打赏
  • 举报
回复
新手,学习了
hzzduoduo 2010-08-31
  • 打赏
  • 举报
回复
跟着高手学习真好。
tang_32089692 2010-08-31
  • 打赏
  • 举报
回复
呵呵,学习了
加载更多回复(42)

5,006

社区成员

发帖
与我相关
我的任务
社区描述
解读Web 标准、分析和讨论实际问题、推动网络标准化发展和跨浏览器开发进程,解决各种兼容性问题。
社区管理员
  • 跨浏览器开发社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧