首頁  >  文章  >  後端開發  >  php產生csv亂碼怎麼辦

php產生csv亂碼怎麼辦

藏色散人
藏色散人原創
2021-05-18 09:42:213050瀏覽

php產生csv亂碼是因為輸出的csv格式檔案沒有BOM,其解決方法就是使用BOM標示字元編碼,程式碼如「header("Content-type:text/csv;charset=gb2312"); 」。

php產生csv亂碼怎麼辦

本文操作環境:windows7系統、PHP7.1版,DELL G3電腦

解決PHP 輸出csv檔案中文亂碼

PHP 下載檔案常採用位元組流輸出的方式。因此常用的下載csv格式代碼如下:

header("Content-Type: application/force-download"); 
header("Content-type:text/csv;charset=gb2312"); 
header("Content-Disposition:filename=打开邮件导出".date("YmdHis").".csv"); 
echo "收件人邮箱,收件人姓名,发送时间\r";
 ob_end_flush();
 foreach($list as $rs) { 
echo $rs->toemail.",".$rs->name.",".date('Y-m-d H:i:s',$rs->addtime)."\r"; 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 "收件人邮箱,收件人姓名,发送时间\r";
ob_end_flush();
foreach($list as $rs)
{
   echo $rs->toemail.",".$rs->name.",".date('Y-m-d H:i:s',$rs->addtime)."\r";
   flush();
}
exit;

由於Linux的換行符號與window的差異。如果上述程式碼在Linux伺服器中有不好的反應,可將 "\r" 改為 "\r\n"。

推薦學習:《PHP影片教學

以上是php產生csv亂碼怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

陳述:
本文內容由網友自願投稿,版權歸原作者所有。本站不承擔相應的法律責任。如發現涉嫌抄襲或侵權的內容,請聯絡admin@php.cn