将一个项目同步到服务器上之后,页面顶部出现了离奇的空行,并且导致部分JS出错。查看原代码发现里面有这么个东东:
HTML中被强插这么一行就自然出现空行了,JS文件同样会编译错误所以导致JS文件出错。既然HTML和JS文件同时被这么个小BOM凌虐,估计文件编码方面的问题。
查了相关资料,由于UTF编码8进制、16进制、32进制,为了告诉系统文件的UTF进制格式,有些编译器会自动帮文件加入一个BOM字符前置()。
查到的方法是用可以去掉BOM的编译器,把有产生BOM的文件都另存为UTF-8 without BOM的编码格式,但是我改动过的实在太多了。
下面介绍个用命令来清理BOM的方法:
第一步:
find /var/www/html/website/ -type f -print -exec hd -n 3 {} \; | grep -1 "ef bb bf" > bom_lines.txt
其中:
-type f 指定查找文件类型为一般文件
-exec command {} \; 为查找到以后执行command,在这里command为"hd -n 3"
-hd -n 3 为将文件转换成16进制编码并拿头三个字符
然后就用grep匹配“ef bb bf” , “ef bb bf” 就是 Bom的16进制形式了
最后把结果输出到 bom_lines.txt 文件中
第二步:
有了目标文件列表下一步就是把Bom都替换掉
while read l; do sed -i '1 s/^\xef\xbb\xbf//' $l ; done < bom_lines.txt
sed -i '1 s/^\xef\xbb\xbf//' $l 就是把 $l 文件里面 匹配到的 ^\xef\xbb\xbf 替换成空
Above all, bom就被我们朵蜜掉了~
End.