最近新学PHP,自己的踩坑经验分享给大家。
今天测试区系统突然所有页面上面都增加了 一行空行,在审核模式下发现在页面前面多了一堆代码  ,查询网上资料发现大家说是UTF8带BOM格式的问题,也找了一堆解决方法,基本上都是叫我改文件格式改成UTF8无BOM格式,但是我想,我文件又没有动过,而且昨天测试区都是正常的啊。
继续查找资料,看到以下这篇文章,有受感悟,把其中一些对我有帮助的记录下来。
检查了我服务器上的文件,基本上都是无BOM的,而且网上讲的基本上都是改HTML文件,我的HTML文件没有带BOM的。思前想后,我好像在本机改了数据库连接文件(这个文件未做SVN版本控制),到服务器上下载下来一看,果然是带BOM的。用NOPEPAD++另存为UTF8无BOM格式,重新上版,解决。
以下内容摘录自以下链接
去除utf-8+BOM问题及svn下的解决办法 http://blog.sina.com.cn/s/blog_a236c9850101mgfc.html
1.查找UTF-8+BOM
shell> grep -r -I -l $'^\xEF\xBB\xBF' 目录
2.删除BOM
shell> grep -r -I -l $'^\xEF\xBB\xBF' /path | xargs sed -i 's/^\xEF\xBB\xBF//;q'
通过查找,你就可以可以找到相应的文件,改就行了。
3.SVN增加控制
上面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文件的时候,就会提示上传失败,需要重新上传。