最近用 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);