去除utf-8+BOM问题及svn下的解决办法

作者: 日期: 八 27, 2012 栏目 参考资料 | 0条评论

前端同事的静态页面通过SVN传到服务器上后就诡异的多出了一个空行,分析了之后认为是BOM的问题。找到问题了,下面就来说一下解决办法。

对于我们这个遇到的这个问题,应该说有三个方面需要处理:

1、查找现在版本库中所有的BOM文件

2、去除文件中的BOM

3、SVN能不能进行BOM检测,防止有BOM的文件commit

一个个解决吧。

1、因为我们是用svn的POST-COMMIT钩子做了程序自动更新至网站发布目录(测试),服务器是linux环境,所以用命令我们就可以找出所有拥有BOM的文件

查找UTF-8+BOM

shell> grep -r -I -l $’^\xEF\xBB\xBF’ 目录

删除BOM

shell> grep -r -I -l $’^\xEF\xBB\xBF’ /path | xargs sed -i ‘s/^\xEF\xBB\xBF//;q’

通过查找,你就可以可以找到相应的文件,改就行了。

2、去除BOM文件,这个比较简单,有很多IDE都能去掉BOM,例如UltraEdit,editplus,vim等等,自己在google搜一下,好多~

3、上面2个问题是补救,这个就是堵漏了,最好是在开发人员SVN上传的时候就提示他,该文件拥有BOM。用过svn的朋友都知道,在版本目录下会有HOOKS目录,里面都是钩子的模板,我们就用pre-commit这个,记得把pre-commit.tmpl改成pre-commit,然后给可执行权限。

#!/bin/sh

REPOS=”$1″

TXN=”$2″

SVNLOOK=/usr/bin/svnlook

FILES=`$SVNLOOK changed -t “$TXN” “$REPOS” | awk ‘/^[UA]/ {print $2}’`

for FILE in $FILES; do

if $SVNLOOK cat -t “$TXN” “$REPOS” “$FILE” | grep -q $’^\xEF\xBB\xBF’; then

echo “Byte Order Mark be found in $FILE” 1>&2

exit 1

fi

done

保存后即可生效,SVNSERVE不需要重启。这样开发人员如果上传BOM文件的时候,就会提示上传失败,需要重新上传。

引用地址:http://www.arkulo.com/?post=57

发表评论

电子邮件地址不会被公开。 必填项已用 * 标注

*

您可以使用这些 HTML 标签和属性: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code> <del datetime=""> <em> <i> <q cite=""> <strike> <strong>