最近新學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文件的時候,就會提示上傳失敗,需要重新上傳。