在使用PHP生成CVS文件后通過Excel打開發現中文全部變成了亂碼,之前在我本地win08通過WPS正常的,但上傳到服務器Linux在服務器上測試出現了亂碼
一開始以后是Linux的問題但后來測試時發現是WPS的問題(猜測可以是WPS對編碼做了處理,服務器上通過Excel打開也是亂碼的)
因為我的PHP文件和數據庫里的編碼都是UTF-8格式而且使用文本編輯器打開的編碼也是UTF-8的
PHP代碼

導出的CVS文檔,使用文本編輯器打開是沒有亂碼

使用Excel打開卻是亂碼

網上很多人說將數據庫中的數據由UTF-8轉換成GBK
或者在header中指定編碼,這兩種方式都嘗試過但仍然沒有用
$html .= iconv("UTF-8","GBK",$row[$key]).$tab; header("Content-type: text/html; charset=utf-8")
於是在這篇文章中發現只要在導出文檔之前添加BOM之后就解決了:
PHP 導出 CSV 文件用 Excel 打開出現中文亂碼
但由於BOM后每一行的單元格就合並成一個了(\t)但使用Table來解決換行問題,但意外的發現使用Table后就解決了亂碼問題(不需要BOM)
解決辦法:
- PHP文件編碼為UTF-8,並指定header的編碼為
UTF-8 header("Content-type:application/vnd.ms-excel;charset=UTF-8");
- 數據庫編碼設置為UTF-8
- 並使用table來進行布局(在導出文檔之前添加BOM)



參考: