UTF-8 萬國碼在規格定義時,有建議在文件的開始處,加入位元組順序記號 (BOM, byte-order mark)。但 Plain Text 文件,就是全部都是文字,將它加入檔頭標記,就不是純文字檔案了,所以一般都沒有實作成有 BOM 檔頭的檔案。
以這支 PHP 程式為例:
<?php若存成 BOM,在 Binary (或 Hex) 格式時,會出現 0xEF 0xBB 0xBF 三個 Bytes 的檔頭。如下圖:
echo 'Aha.......'.PHP_EOL;
?>

一般是存成沒有 BOM 檔頭的檔案,如下圖:

解法一:存成有/無 BOM 的格式
一些編輯器 (諸如 UltraEdit, Visual Studio) 內定存檔是一般無 BOM 格式,但可以在存檔時,指定要存成 BOM 格式。如下面二張圖:


解法二:改設定讓程式可以判斷 BOM
PHP 直譯器,內定是不能跑有 BOM 檔頭的 PHP script 程式,若一定要跑有 BOM 檔頭的程式,就要改設定,將 php.ini 裡的 zend.multibyte 設成 On
; If enabled, scripts may be written in encodings that are incompatible with
; the scanner. CP936, Big5, CP949 and Shift_JIS are the examples of such
; encodings. To use this feature, mbstring extension must be enabled.
;zend.multibyte = Off
zend.multibyte = On

解法三:寫程式去掉所有檔案的 BOM 檔頭
網路上有些文件說明如何用 PHP 程式去掉有 BOM 檔頭的 PHP 程式。但是這樣就比較麻煩了。