今天js上线的代码测试一直有问题与我们的css完全一样,只是压缩了一下。这个问题纠结了整整一天。后来我登陆上了他们的测试服务器,直接用vim打开了他们组压缩好的css文件。打开一看头部有个<feff>,这才意识到可能是bom头没清除。结果去掉了bom头确实css起作用了。后来经查验时他们的一个去除bom的进程出问题了。
下面是我找来的bom的一些知识点:
所谓 BOM,全称是Byte Order Mark,它是一个Unicode字符,通常出现在文本的开头,用来标识字节序 (Big/Little Endian),除此以外还可以标识编码(UTF-8/16/32),如果出现在文本中间,则解释为zero width no-break space。
根据w3c里FAQ的建议,解决方法就是,删无赦!
# curl -s http://phone.10086.cn/ | head -1 | sed -n l
\357\273\277<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional\
//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">\r$
# curl -s http://phone.10086.cn/ | head -1 | xxd
0000000: efbb bf3c 2144 4f43 5459 5045 2068 746d ...<!DOCTYPE htm
0000010: 6c20 5055 424c 4943 2022 2d2f 2f57 3343 l PUBLIC "-//W3C
0000020: 2f2f 4454 4420 5848 544d 4c20 312e 3020 //DTD XHTML 1.0
0000030: 5472 616e 7369 7469 6f6e 616c 2f2f 454e Transitional//EN
0000040: 2220 2268 7474 703a 2f2f 7777 772e 7733 " "http://www.w3
0000050: 2e6f 7267 2f54 522f 7868 746d 6c31 2f44 .org/TR/xhtml1/D
0000060: 5444 2f78 6874 6d6c 312d 7472 616e 7369 TD/xhtml1-transi
0000070: 7469 6f6e 616c 2e64 7464 223e 0d0a tional.dtd">..
#设置UTF-8编码
:set fileencoding=utf-8
#添加BOM
:set bomb
#删除BOM
:set nobomb
#查询BOM
:set bomb?
shell> grep -I -r -l $‘\xEF\xBB\xBF‘ /path
shell> grep -I -r -l $‘\xEF\xBB\xBF‘ /path | xargs sed -i ‘s/^\xEF\xBB\xBF//;q‘
open( OUT, ">:utf8", "a.txt" ) or die "a.out: $!"; print OUT "\x{feff}"; print OUT "aaaa\n"; close OUT;
bom 头 <feff>的问题,布布扣,bubuko.com
原文:http://blog.csdn.net/waiting7436/article/details/20653671