將一個項目同步到服務器上以後,頁面頂部出現了離奇的空行,而且致使部分JS出錯。查看原代碼發現裏面有這麼個東東:html
HTML中被強插這麼一行就天然出現空行了,JS文件一樣會編譯錯誤因此致使JS文件出錯。既然HTML和JS文件同時被這麼個小BOM凌虐,估計文件編碼方面的問題。web
查了相關資料,因爲UTF編碼8進制、16進制、32進制,爲了告訴系統文件的UTF進制格式,有些編譯器會自動幫文件加入一個BOM字符前置()。bash
查到的方法是用能夠去掉BOM的編譯器,把有產生BOM的文件都另存爲UTF-8 without BOM的編碼格式,可是我改動過的實在太多了。服務器
下面介紹個用命令來清理BOM的方法:編碼
第一步:code
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 文件中htm
第二步:編譯器
有了目標文件列表下一步就是把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 替換成空it
Above all, bom就被咱們朵蜜掉了~
End.