1. 什么是BOM頭
在utf-8編碼文件中BOM在文件頭部,占用三個字節,用來標識該文件屬于utf-8編碼,現在已經有很多軟件識別BOM頭,但還是有些不能識別BOM頭,比如PHP就不能識別BOM頭,這也就是用記事本編輯utf-8編碼的PHP文件后,就會報錯的原因。
2. 包含BOM頭文件的產生
在windows環境下,用記事本打開任何一個文本文件,另存為utf-8格式后,這樣文件就自動被加上了BOM頭信息。
比較:
utf-8(含BOM頭)
(此圖片來源于網絡,如有侵權,請聯系刪除! )
(此圖片來源于網絡,如有侵權,請聯系刪除! )
utf-8(不含BOM頭)
(此圖片來源于網絡,如有侵權,請聯系刪除! )
(此圖片來源于網絡,如有侵權,請聯系刪除! )
從上圖的比較中,可以很明顯的看出,含BOM頭的文件多出三個字節 efbbbf。
3. BOM頭信息的去除方法
用Notepad++打開文件,選擇 格式 -> 以UTF-8無BOM格式編碼,再保存就行。如下圖:
4. 在PHP類的項目中,自動處理BOM頭信息(只需要將此文件放在項目根目錄下,從瀏覽器訪問即可)
03 |
if (isset($_GET[ 'dir' ])) { //設置文件目錄 |
04 |
$basedir = $_GET[ 'dir' ]; |
12 |
function checkdir($basedir) { |
13 |
if ($dh = opendir($basedir)) { |
14 |
while (($ file = readdir($dh)) !== false ) { |
15 |
if ($ file != '.' && $ file != '..' ) { |
16 |
if (!is_dir($basedir . "/" . $ file )) { |
17 |
echo "filename: $basedir/$file " . checkBOM( "$basedir/$file" ) . " |
20 |
$ dirname = $basedir . "/" . $ file ; |
30 |
function checkBOM($filename, $auto = 1) { |
31 |
$contents = file_get_contents($filename); |
32 |
$charset[1] = substr($contents, 0, 1); |
33 |
$charset[2] = substr($contents, 1, 1); |
34 |
$charset[3] = substr($contents, 2, 1);
|
|