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

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