[WebDev]PHP export CSV檔案時中文亂碼問題

12/04/2014

前幾天發現了PHP一些奇特的事情.....
就是...當我正準備以一個php script把資料由Mysql export csv file時, 發現無論無樣設定encoding, 用Microsoft excel把檔案打開時, 中文還是會出現亂碼....但在Notepad++看卻正常
明明一切也是UTF-8了...

最後高人給了我一句echo statment , 一切便解決了...


header("Content-type: text/csv;charset=utf-8");
header("Content-Disposition: attachment; filename=filename.csv");
header("Pragma: no-cache");
header("Expires: 0");

echo "\xEF\xBB\xBF";

echo "column1,column2,column3\n";

\xEF\xBB\xBF

原來是UTF-8 的BOM(byte of mark) ! 雖然這是optional 的, 但萬一如果讀取檔案時的程式使用BOM但encoding時卻沒有,便會需要把這個BOM放回在整個 text/file stream的最開頭了~
Wikipedia 也有詳細的解釋 http://en.wikipedia.org/wiki/Byte_order_mark

其實阿Notepad++也早已給了我提示了......

You Might Also Like

0 意見

Flickr Images