求分析這個神奇的字元是什麼?

我寫php時,先輸出一段html再include()一個文件(內無輸出),再繼續輸出一段html,那麼在最終輸出的html內include部分會出現一個奇怪的東西,從而導致網頁異常。經我分析,是不知怎麼出現了這個一個字元,求分析這是什麼字元。

文件下載鏈接神奇字元(用notepad++打開能看到).txt 用記事本打開是看不到那個字元的,用notepad++就能看到。


1,hex編輯器

打開為EF BB BF EF BB BF

2,打開google一搜就知道了.

  1. 該內容為UTF-8的BOM,也就是表明本文件採用的位元組順序是什麼.多位元組編碼需要說明自己的順序,來防止歧義.BOM就是這個作用.不過,UTF-8其實是不需要位元組順序說明的.(具體參考UTF-8編碼).所有UTF-8的BOM其實是可有可無的.有也符合標準,沒有也可以解析出來.不過這也就導致了各種分歧.
  2. 如果其他編輯器,錯誤的認為是其他編碼格式,那麼也可以強制解析出來,出來的就是各種亂碼.

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,顧名思義,它是個沒有寬度也沒有斷字的空白。

總之,剩下的你自己搜索吧。


推薦閱讀:

當今理論計算機領域有哪些牛人?
C++ 學習中有哪些障礙是初學者難以理解的?
為什麼刪除的數據可以被還原?
求教。音頻文件的位數,碼率,採樣率都代表什麼意思啊?

TAG:PHP | 編程 | 計算機 | Unicode統一碼 | Firebug |