求分析這個神奇的字元是什麼?
01-07
我寫php時,先輸出一段html再include()一個文件(內無輸出),再繼續輸出一段html,那麼在最終輸出的html內include部分會出現一個奇怪的東西,從而導致網頁異常。經我分析,是不知怎麼出現了這個一個字元,求分析這是什麼字元。
文件下載鏈接神奇字元(用notepad++打開能看到).txt 用記事本打開是看不到那個字元的,用notepad++就能看到。
1,hex編輯器打開為EF BB BF EF BB BF2,打開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 MarkUTF-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 |