Site icon Soul & Shell Blog

PHP 處理惱人的 BOM 問題,輸出 Excel 格式加入 BOM

最近用 PHP 輸出 Excel 檔案,為了偷懶沒有採用 Excel API (像是phpExcel) 進行處理。而是利用 <Tab> 與換行來產生 Excel 能夠開啟的檔案,但是遇到一個問題,就是中文會變成亂碼。原因是這種偷懶的方法必須在檔頭自行加入 BOM,然而加入 BOM 可以在資料輸出以前加入 EF BB BF 即可。如此便可以解決中文亂碼的問題,程式範例如下:

Header('Content-Description: File Transfer');
Header('Content-type: application/vnd.ms-excel');
Header('Content-Disposition: attachment; filename=result.xls');
Header('Content-Transfer-Encoding: binary');
Header('Expires: 0');
Header('Cache-Control: must-revalidate, post-check=0, pre-check=0');
Header('Pragma: public');

$cloumns = array('中文欄位(1)', '中文欄位(2)', '中文欄位(3)');
$rows = array(
        array('Row_1_1', 'Row_1_2', 'Row_1_3'),
        array('Row_2_1', 'Row_2_2', 'Row_2_3'),
    );

//加入 BOM 送出 EF BB BF
echo chr(239).chr(187). chr(191);

//產生標頭
foreach ($cloumns as $name) {
    echo $name."\t";
}
echo "\r\n";

//產生欄位
foreach ($rows as &$row) {
    foreach ($row as $value) {
        echo $value."\t";
    }
    echo "\r\n";
}
echo "\r\n";
exit(0);

 

Exit mobile version