BOM

BOM(Byte Order Mark),字節順序標記,出如今文本文件頭部,Unicode編碼標準中用於標識文件是採用哪一種格式的編碼。
  在UCS 編碼中有一個叫作 "Zero Width No-Break Space" ,中文譯名做「零寬無間斷間隔」的字符,它的編碼是 FEFF。而 FFFE 在 UCS 中是不存在的字符,因此不該該出如今實際傳輸中。UCS 規範建議咱們在傳輸字節流前,先傳輸字符 "Zero Width No-Break Space"。這樣若是接收者收到 FEFF,就代表這個字節流是 Big-Endian 的;若是收到FFFE,就代表這個字節流是 Little- Endian 的。所以字符 "Zero Width No-Break Space" (「零寬無間斷間隔」)又被稱做 BOM。
  UTF-8 不須要 BOM 來代表字節順序,但能夠用 BOM 來代表編碼方式。字符 "Zero Width No-Break Space" 的 UTF-8 編碼是 EF BB BF。因此若是接收者收到以 EF BB BF 開頭的字節流,就知道這是 UTF-8編碼了。Windows 就是使用 BOM 來標記文本文件的編碼方式的。
  字符U+FEFF若是出如今字節流的開頭,則用來標識該字節流的字節序,是高位在前仍是低位在前。若是它出如今字節流的中間,則表達零寬度非換行空格的意義,用戶看起來就是一個空格。從Unicode3.2開始,U+FEFF只能出如今字節流的開頭,只能用於標識字節序,就如它的名稱——字節序標記——所表示的同樣;除此之外的用法已被捨棄。取而代之的是,使用U+2060來表達零寬度無斷空白。
  相似WINDOWS自帶的記事本等軟件,在保存一個以UTF-8編碼的文件時,會在文件開始的地方插入三個不可見的字符(0xEF 0xBB 0xBF,即BOM)。它是一串隱藏的字符,用於讓記事本等編輯器識別這個文件是否以UTF-8編碼。對於通常的文件,這樣並不會產生什麼麻煩。但對於 PHP來講,BOM是個大麻煩。
  PHP並不會忽略BOM,因此在讀取、包含或者引用這些文件時,會把BOM做爲該文件開頭正文的一部分。根據嵌入式語言的特色,這串字符將被直接執行(顯示)出來。由此形成即便頁面的 top padding 設置爲0,也沒法讓整個網頁緊貼瀏覽器頂部,由於在html一開頭有這3個字符呢!
相關文章
相關標籤/搜索
本站公眾號
   歡迎關注本站公眾號,獲取更多信息