以這支 PHP 程式為例:
<?php
echo 'Aha.......'.PHP_EOL;
?>
若存成 BOM,在 Binary (或 Hex) 格式時,會出現 0xEF 0xBB 0xBF 三個 Bytes 的檔頭。如下圖:
BOM 檔頭程式檔案, 紅框處的 0xEF 0xBB 0xBF 就是 BOM
一般是存成沒有 BOM 檔頭的檔案,如下圖:
解法一:存成有/無 BOM 的格式
一些編輯器 (諸如 UltraEdit, Visual Studio) 內定存檔是一般無 BOM 格式,但可以在存檔時,指定要存成 BOM 格式。如下面二張圖:
UltraEdit 在 Save as 時,指定登入 BOM 選項
Visual Studio 可以 Save as 指定 with (有 BOM) 或 without signature (無 BOM) 的 UTF-8
解法二:改設定讓程式可以判斷 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
php.ini 內定 zend.multibyte 是 Off,設定成 On 時,遇到有 BOM 檔頭的程式也可以順利跑
解法三:寫程式去掉所有檔案的 BOM 檔頭
網路上有些文件說明如何用 PHP 程式去掉有 BOM 檔頭的 PHP 程式。但是這樣就比較麻煩了。