问题表现:
1、双击打开html页面,显示正常,通过浏览器打开,表格顶部出现一个空行;
2、通过浏览器直接浏览Smarty编译后的php文件,显示正常,直接浏览含有display()的php页面,空行又出现
3、逐一排查各个问题,排除了HTML和CSS等其他原因
问题不大但很棘手,足足让我郁闷了一天。。。
究竟是什么带来的这个奇怪的空行呢?
问题分析:
会不会是之前修改了几个文件的编码导致的呢,之前那几个文件我用记事本直接从原来的ANSI编码转换成了UTF-8保存,而Smarty文件全部使用的ANSI编码,使用include包含文件时,就出现了空行。可这个空行究竟哪里来的呢?
到网上查了一下才知道,原来是因为UTF-8编码的文件头部被加入了BOM(万国码档案签名:Byte Order Mark, U+FEFF)标记。UTF-8编码方式对于BOM不是强制的,保存文件的时候会出现不同的处理方式。而大多数浏览器只会过滤掉一次BOM,当多次使用 include时,就会碰见这个问题。
问题解决:
用UE打开相应的php和html文件,切换到十六进制模式查看发现,果真在文件头部多了几个字符“EF BB BF”。都删掉之后再到浏览器浏览,空行终于消失了!
备注:
1) notepad(记事本) : 可以自动识别出没有带 bom 的 utf-8 编码格式文件,但不可以控制保存文件时是否添加 bom , 如果保存文件,那么会统一添加 bom 。
2)editplus(我经常用): 不能自动识别出没有 bom 的 utf-8 编码格式文件,保存文件为 utf-8 时会自动添加 bom
3) UltraEdit(UE,传说中最牛的十六位编辑器) : 对于字符编码的功能最为强大, 可以自动识别带 bom 和不带 bom 的 utf-8 文件 (可以配置); 保存的时候可以通过配置选择是否添加 bom.