我寫php時,先輸出一段html再include()一個檔案(內無輸出),再繼續輸出一段html,那麼在最終輸出的html內include部分會出現一個奇怪的東西,從而導致網頁異常。經我分析,是不知怎麼出現了這個一個字元,求分析這是什麼字元。
檔案下載連結神奇字元(用notepad++開啟能看到).txt
用記事本開啟是看不到那個字元的,用notepad++就能看到。
回複內容:
1,hex編輯器
開啟為EF BB BF EF BB BF
2,開啟google一搜就知道了.
- 該內容為UTF-8的BOM,也就是表明本檔案採用的位元組順序是什麼.多位元組編碼需要說明自己的順序,來防止歧義.BOM就是這個作用.不過,UTF-8其實是不需要位元組順序說明的.(具體參考UTF-8編碼).所有UTF-8的BOM其實是可有可無的.有也符合標準,沒有也可以解析出來.不過這也就導致了各種分歧.
- 如果其他編輯器,錯誤的認為是其他編碼格式,那麼也可以強制解析出來,出來的就是各種亂碼.
3,結合你的問題,就很簡單了,這個是PHP的輸出,總是帶BOM的緣故.
php我沒有用過,不過也有討論如何去掉BOM輸出.自己看下吧.
api - How to remove %EF%BB%BF in PHP string
----
這個問題,已經有比較靠譜的回答了.
我就是順手下載下來了,既然看了,也就是寫下來吧.
----
神奇是個非常討厭的字眼,
它說明你不會分析問題,對待問題根本就不知道怎麼著手處理.更不能順藤摸瓜定位問題,何用妄談解決問題呢.
(以上不是說提問人,只是結合自己身邊的事情感慨一把)
放棄神奇這種字眼吧,碰到問題也不要沒頭蒼蠅式的瞎碰.或者隨便改來改去,夢想程式突然就神奇的正常了.要學會定位問題,分析問題,解決問題.BOM: Byte Order Mark
UTF-8 BOM又叫UTF-8 簽名,其實UTF-8 的BOM對UFT-8沒有作用,是為了支援UTF-16,UTF-32才加上的BOM,BOM簽名的意思就是告訴編輯器當前檔案採用何種編碼,方便編輯器識別,但是BOM雖然在編輯器中不顯示,但是會產生輸出,就像多了一個空行如果檔案不多,或者只是建立檔案導致的原因,重新儲存一次,儲存的時候選擇UTF-8 no BOM,或者不是UTF-8 with BOM的那個,有些編輯器是在“設定”裡面設定儲存是否帶BOM頭。UTF-8我下了你這個檔案,開啟( OS X, textmate 2 )看到的是
Unicode Character 'ZERO WIDTH NO-BREAK SPACE' (U+FEFF)
我搜尋了一下,在維基上看到了這個
UTF-16的編碼模式
UTF-16的大尾序和小尾序儲存形式都在用。一般來說,以Macintosh
製作或儲存的文字使用大尾序格式,以Microsoft
或Linux
製作或儲存的文字使用小尾序格式。
為了弄清楚UTF-16檔案的大小尾序,在UTF-16檔案的開首,都會放置一個U+FEFF字元作為Byte Order Mark
(UTF-16LE以FF FE代表,UTF-16BE以FE FF代表),以顯示這個文字檔案是以UTF-16編碼,其中U+FEFF字元在UNICODE中代表的意義是ZERO WIDTH NO-BREAK SPACE,顧名思義,它是個沒有寬度也沒有斷字的空白。
總之,剩下的你自己搜尋吧。