北京北大青鸟学校学术部老师发现,在指导同学们用utf-8编码做网站时,很多同学都会遇到IE下莫名其妙的空出一行,大家用肉眼看不见,也就是 UTF-8 BOM 签名了,更多 BOM 知识请查找“Unicode BOM”。这种情况该怎么办?我们不妨看看北大青鸟学员:周晓丽同学是如何做的。
先介绍一下项目架构:IIS + .net 2.0 + SSI
暂且不讨论为什么要用 SSI,而不用其它技术(如 UserControl)
生成 index.shtml 肯定要带 BOM,其实带不带也不会影响页面上会出现空白行。
index.shtml 内容如下:
< html>
< body>
< !--#include file=head.shtml-->
< /body>
< /html>
1、head.shtml 保存为 UTF-8 带 BOM 时,会出现空白行(页面元素当然不止这些)。
2、head.shtml 保存为 UTF-8 不带 BOM 时,会出现乱码,因为 SSInc.dll 加载这个文件时,不知道文件的编码(因为没有 BOM 签名),因此会按 GBK 来加载文件,最后乱码。所以,正也不行,反也不行,只有最后一招了。(北京北大青鸟学校)
改 index.shtml 为:
< html>
< body>
< !--<!--#include file=head.shtml-->
< /body>
< /html>
在 head.shtml 的页开头加上
<!--BOM-->
内容。
意图将 <!--#include 前的 <!-- 和 head.shtml 里的 BOM--> 用HTML注释掉,在 asp 下应该没有问题。
2年前,用 asp.net include 就发现一个问题,就是它的解释方法和 asp 完全不同,不信可以试试
< !--<!--#include file=head.shtml-->执行结果等效于
< !--#include file=head.shtml-->
又试了半个小时,发现
< !--#<!--#include file=head.shtml-->
被忽略,期待更好的解决方案。北京北大青鸟学校提供。