首頁 >後端開發 >php教程 >PHP 下載檔案時如何自動新增bom頭及解釋BOM頭和去掉bom頭的方法

PHP 下載檔案時如何自動新增bom頭及解釋BOM頭和去掉bom頭的方法

WBOY
WBOY原創
2016-07-29 09:07:44999瀏覽

PHP 下載檔案時自動加入bom頭,首先需要大家弄清楚,什麼是bom頭?在Windows下用記事本之類的程式將文字檔儲存為UTF-8格式時,記事本會在檔案頭前面加上幾個不可見的字元(EF BB BF),就是所謂的BOM(Byte order Mark )。

在utf-8編碼文件中BOM在文件頭部,佔用三個字節,用來標示該文件屬於utf-8編碼,現在已經有很多軟體識別bom頭,但是還有些不能識別bom頭,例如PHP就無法辨識bom頭,這也是用記事本編輯utf-8編碼後執行就會出錯的原因了。

不僅限於 記事本保存的文件,只要在文件的開口包含了EF BB BF 幾個不可見的字符(十六進制應該是xEFxBBxBF,用二進制編輯文件可見)。這像是約定俗成的東西,當系統看到這玩意的時候,就會覺得你這個檔案是UTF-8編碼的。

如果你的介面是UTF-8的,你需要強制下載一個文件,例如csv.excel在預設情況(中文背景)下,認為csv是GB編碼的,所以如果米有bom頭,那你給使用者呈現的文件,可能就是亂碼了。

怎麼加bom頭呢?

在輸出文件之前加上bom頭就可以了:

代碼如下:

// 文件名
 $filename = "www.jb51.net .csv";
 header('Expires: ' . gmdate('D, d M Y H:i:s', $_SERVER['REQUEST_TIME'] + 10) . ' GMT');
 header('Cache-Control: max-age=10');
 //header('Content-Type: application/vnd.ms-excel; charset=utf-8');
 header('Content-Type: text/csv; charset=utf-8');
 header("Content-Disposition: attachment; filename={$filename}");
 // 如果结果中有提示信息,则把第一行输出改为提示信息文字
 $out = "xEFxBBxBF";// 加上bom头,系统自动默认为UTF-8编码
 if (!empty($extra['notice'])) {
 $out .= "{$extra['notice']}rn";
 }
 // 输出
 foreach ($table as $row) {
 $out .= implode(",", $row) . "rn";
 }
 /* if (mb_detect_encoding()($out) == 'UTF-8') {
 $out = iconv("UTF-8//IGNORE", "GBK", $out);
 } */
 echo $out; 

以下內容給大家介紹BOM頭和去掉方法

以下內容給大家介紹BOM頭和去掉方法

去掉兩種:

1、editplus去BOM頭的方法

編輯器調整為UTF8編碼格式後,儲存的檔案前面會多出一串隱藏的字元(也即是BOM),用於編輯器識別這個檔案是否是以UTF8編碼。

運行E​​ditplus,點擊工具,選擇首選項,選中文件,UTF-8標識選擇 總是刪除簽名,然後對PHP文件編輯和保存後的PHP文件就是不帶BOM的了。

2、ultraedit去除bom頭辦法

打開文件後,另存為選項的編碼格式裡選擇(utf-8 無bom頭),確定就ok了

怎麼樣,去掉bom頭很簡單吧

再來一段議論utf8的BOM信息的


BOM是指php檔案本身的儲存方式為帶BOM的UTF-8,普通頁面的中文亂碼方式一般不是由這個原因導致的。

header("Content-type: text/html; charset=utf-8");

這句話控制html輸出頁面的編碼方式,BOM只有在WINDOWS下採用「記事本」儲存為UTF-8時才會有,這個可以用WINHEX把開始的2個位元組刪掉。

在dreamweaver裡面編碼設定裡面可以設定是否帶BOM,一般只要php輸出的不是圖片(GDI Stream),BOM都不會導致問題。

GDI Stream如果開頭有了額外的 字元就會顯示為 紅色叉。

以上內容為大家介紹了PHP 下載檔案時自動添加bom頭及解釋BOM頭和去掉方法,希望大家喜歡。

以上就介紹了PHP 下載檔案時如何自動添加bom頭及解釋BOM頭和去掉bom頭的方法,包括了方面的內容,希望對PHP教程有興趣的朋友有所幫助。 🎜 🎜 🎜
陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn