很久以前,在我第一次使用 utf-8 编码做网站时,就遇到过 IE 下莫名其妙的空出一行(FireFox 下无问题),肉眼看不见,也就是 UTF-8 BOM 签名了,更多 BOM 知识请查找“Unicode BOM”。 先讲讲我的项目架构,IIS + .net 2.0 + SSI 暂且不讨论为什么要用 SSI,而不用其它技术(如 UserControl) 生成 index.shtml 肯定要带 BOM,其实带不带也不会影响页面上会出现空白行。 index.shtml 内容如下:
posted on 2008-04-17 12:00 nicye 阅读(2072) 评论(25) 编辑 收藏
很神奇的样子. 回复 引用 查看
有这等事儿?路过 回复 引用 查看
@李战 网上关于这类问题的文章不太多,主要是关键字不明显吧,都被其它内容占有的 我相信不少朋友都遇到过这类问题 如何解决的呢? 回复 引用 查看
也想知道 回复 引用 查看
不是很明白 晕了 回复 引用
@ASP.NET CMS 你用过 utf-8 建站,就有可能遇到 回复 引用 查看
unicode bom 原来跟 utf-8 signature一样啊。。。 回复 引用
我以前也遇到过这种问题,后来把生成HTML文件的编码统一换成GB2312,才解决. 回复 引用
@joewang 你说的只能在中文 OS 才行 回复 引用 查看
强烈关注此话题我一开始一直以为是css代码编写造成浏览器兼容性问题,可后来反复调试发现只有include后才有此问题。转成GB2312实在是无奈之举望高人解决~cms系统中SHTML还是经常用的 回复 引用 查看
@Ivan Jiang 就 IE 有这个问题,IE 害死人 回复 引用 查看
我现在的解决办法是把header.htmlfooter.html用UltraEdit这样的软件保存成utf-8 不带Dom的格式而index.shtml该怎么来还是怎么来 回复 引用 查看
@Ivan Jiang 页面上如果需要 include 一个程序生成的文件,如左边最新新闻。其它页面都 include 它 引:(以下都是用 asp.net 的 UTF8 流写文件) 1、head.shtml 保存为 UTF-8 带 BOM 时,会出现空白行(页面元素当然不止这些)。 2、head.shtml 保存为 UTF-8 不带 BOM 时,会出现乱码,因为 SSInc.dll 加载这个文件时,不知道文件的编码(因为没有 BOM 签名),因此会按 GBK 来加载文件,最后乱码。。。 Encoding.UTF8 带 BOM new UTF8Encoding(false) 不带 BOM 最后,还是不能解决 回复 引用 查看
对! 就是用 new UTF8Encoding(false) 生成不带BOM的文件。你可以尝试把head.shtml改成不再包含其它文件了,就能解决了。现在我的被包含文件都是html格式的。如果被包含文件还是shtml,那层层包含结构也不是很清晰啊。 回复 引用 查看
@Ivan Jiang 先谢了,我试过 如果 index.shtml 里include就没有问题 如果 index.aspx 里include就乱码了(对于 .aspx 还有更奇怪的, include head.shtml(NO BOM)正常,里面有中文 include bottom.shtml(NO BOM)正常,里面有中文 include xxx.shtml(NO BOM)乱码,里面有中文) 再看看 http://www.cnblogs.com/kellynic/archive/2008/04/17/1158303.html 这篇文章,你可以试试,太搞怪了 回复 引用 查看
你是说b.shtml文件里123</a>这个位置加不加回车在IE7下面效果不一样?我本机上没有IE7 还没试过 在IE6 和FF2里面没问题啊我现在用index.shtml或者任何的aspx去include head.html(NO BOM)都没有问题而且被包含文件里面也没加过你说的<!--BOM-->所以不太清楚如果include head.shtml情况会怎样 回复 引用 查看
@Ivan Jiang b.shtml 不加回车,浏览页面后明显的少了一个 </a> 加回车就没有问题,但明显字符不对劲 细心就可以观察到 关于 include BOM 问题,我实在无能为力,折磨了两天 所以以后 我要 include 的文件,我会在最前面加上 --> 再在 include 调用的地方改成 <!--#<!--#include file="*.shtml"--> 这样就什么问题也没了,页面照样保存成 UTF-8 BOM 很勉强的解决方法,实在没折了 关于这个问题就先这样了,只能感慨,还能怎样呢?IE太差劲了 回复 引用 查看
你这个方法很实用,呵呵,谢了 经过试验 <!--#fixBom><!--#include ......--><!--fixBom--> 生成的时候把#fixBom>替换成#就可以去除顶部的空行了 在include...后面加一段注释,html模板代码就不会被<!--#通通变为注释了 回复 引用
@NormRen 你的方法在 IE 下没有问题,试过 Firefox 没有?呵呵 Firefox 和 IE 的注释解释方式不同 如 <!--#abc<!--BOM--> IE 下注释的内容为 #abc<!--BOM Firefox 下为 BOM,前面的不会解释成注释内容,然后页面自然就会乱 回复 引用 查看
@nicye 呵呵,恩,再次感谢~ 回复 引用
刚试过一下, <!--#--在IE和火狐下测试通过 :) 回复 引用
--引用-------------------------------------------------- NormRen: 刚试过一下, <!--#--在IE和火狐下测试通过 :) -------------------------------------------------------- 哈哈,你也遇到这个问题? 回复 引用 查看
@nicye 是啊,呵呵~~ 回复 引用
我遇到过类似的情况,用editplus 其中,unicode/unicode big endian都会出现空白行,使用utf-8问题消失,可以试一下。 回复 引用 查看
哥们 我也绝望中。。。 aspx为什么要必须BOM才行 微软啊微软 太操蛋了 返回给客户端的居然又不带BOM... 回复 引用
Powered by: 博客园 Copyright © nicye