我使用的是一个Javascript文件,它是其他JavaScript文件的串联。
不幸的是,将这些JavaScript文件连接在一起的人在读取文件时没有使用正确的编码,并允许每个JavaScript文件的BOM都写入连接的JavaScript文件。
有没有人知道搜索连接文件并删除任何/所有BOM标记的简单方法?
使用PHP或Mac OSX的bash脚本会很棒。
答案 0 :(得分:17)
另请参阅:Using awk to remove the Byte-order mark
要从文本文件中的任何位置删除多个BOM,您可以尝试类似的操作。只需省略^
锚:
perl -e 's/\xef\xbb\xbf//;' -pi~ file.js
(这会就地编辑文件。但是会创建一个备份file.js~
。)
答案 1 :(得分:15)
我通常使用vim
执行此操作:
vim -c "set nobomb" -c wq! myfile
答案 2 :(得分:0)
我也想出了这个完全用PHP工作的解决方案:
$packed = pack("CCC",0xef,0xbb,0xbf);
$contents = preg_replace('/'.$packed.'/','',$contents);
答案 3 :(得分:0)
获取BOM文件
grep -rIlo $’^\xEF\xBB\xBF’ ./
删除BOM文件
grep -rIlo $’^\xEF\xBB\xBF’ . | xargs sed –in-place -e ‘s/\xef\xbb\xbf//’
排除.svn目录
grep -rIlo –exclude-dir=”.svn” $’^\xEF\xBB\xBF’ . | xargs sed –in-place -e ‘s/\xef\xbb\xbf//’
答案 4 :(得分:0)
我编写了一个bash脚本,请参见here,该脚本可在Mac上运行,但尚未在其他系统上进行测试,但我怀疑它也可以在该系统上运行。该脚本还支持包含空格的文件或文件路径。
示例
从当前目录中的所有文件中删除BOM表:
rmbom .
在当前目录中打印具有BOM表的所有文件
rmbom . -a
仅从扩展名为txt或cs的当前目录中的所有文件中删除BOM表:
rmbom . -e txt -e cs
打印帮助
rmbom -h