ThinkPhP UTF8+BOM导致 &#65279如何解决

最近新学PHP,自己的踩坑经验分享给大家。


今天测试区系统突然所有页面上面都增加了 一行空行,在审核模式下发现在页面前面多了一堆代码   &#65279 ,查询网上资料发现大家说是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文件的时候,就会提示上传失败,需要重新上传。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章