php下載utf8編碼的csv,用excel開啟亂碼
伺服器上有一個utf8編碼的csv檔案,經過php下載到本地之後,用excel開啟,發現亂碼了。原因是這個csv檔案沒有BOM頭。
BOM頭是放在UTF-8編碼的檔案的頭部的三個字元(0xEF 0xBB 0xBF,即BOM)佔用三個位元組,用來標識該檔案屬於UTF-8編碼。
所以在php裡面下載utf8編碼的csv的時候,需如下方程式碼所示,新增BOM頭:
$downloadUrl = '/home/nemo/firDir/test.csv'; $fileName = 'test.csv'; ini_set('memory_limit', '128M'); header('Content-type: application/octet-stream;charset=utf-8'); header('Content-Disposition: attachment; filename=' . $fileName); ob_end_clean(); echo chr(0xEF).chr(0xBB).chr(0xBF); // 輸出BOM頭 readfile($downloadUrl);
因為php不能識別bom頭,當需要讀取使用者上傳的檔案內容時,也需要刪除bom頭。
$filePath = '/home/nemo/firDir/test.txt'; $data = file_get_contents($filePath); $data = trim($data, chr(0xEF) . chr(0xBB) . chr(0xBF)); …… ……