編碼的世界 / 優質文選 / 文明

解決PHP 輸出csv文件中文亂碼


2022年5月25日
-   

PHP 下載文件常采用字節流輸出的方式。因此常用的下載csv格式代碼如下:
header("Content-Type: application/force-download");
header("Content-type:text/csv;charset=gb2312");
header("Content-Disposition:filename=打開郵件導出".date("YmdHis").".csv");
echo "收件人郵箱,收件人姓名,發送時間
";
ob_end_flush();
foreach($list as $rs) {
echo $rs->toemail.",".$rs->name.",".date('Y-m-d H:i:s',$rs->addtime)."
"; flush();
}
exit;

 這樣下載的csv文件使用記事本或者sublime text等編輯器打開是正常的,但是使用excel打開就會亂碼,原因是輸出的csv格式文件沒有BOM,BOM的說法很多,正常情況下,在PHP中是需要去除BOM的,不過csv文件需要使用BOM標示字符編碼。解決方式如下:
header("Content-Type: application/force-download");
header("Content-type:text/csv;charset=gb2312");
header("Content-Disposition:filename=打開郵件導出".date("YmdHis").".csv");
echo chr(0xEF).chr(0xBB).chr(0xBF);
echo "收件人郵箱,收件人姓名,發送時間
";
ob_end_flush();
foreach($list as $rs)
{
echo $rs->toemail.",".$rs->name.",".date('Y-m-d H:i:s',$rs->addtime)."
";
flush();
}
exit;
  更新 2017-09-05   
由於Linux的換行符與window的差別。如果上述代碼在Linux服務器中有不好的反應,可將 "
" 改為 "
"。

熱門文章