php導出csv文件名亂碼問題解決


php 使用phpexcel類導出展示的數據,其中文件名稱根據功能模塊來命名的,其中有中文漢字,到下載的時候會有亂碼,下載不下來文件,本地windows系統測試的時候 使用iconv()轉碼,下載沒問題

步驟:1、在文件保存xls的時候  先把$filename = iconv("UTF-8","GB2312//IGNORE",$file_name);轉為gb2312,編碼環境是utf-8編碼,這樣保存的文件是漢字

2、返回頁面下載文件名稱的時候還要轉過來$filename = iconv("GB2312","UTF-8",$filename),把文件名稱轉為utf-8編碼。

這樣在本地windows下下載沒問題,但~~~~是,部署到線上linux系統下保存文件名稱是亂碼,下載不下來

解決方法:把之前iconv轉碼去掉,直接用這些

ob_end_clean();
header('Content-Type: application/vnd.ms-excel');
header("Content-Disposition: attachment;filename=\"$filename\"");
header('Cache-Control: max-age=0');
這樣用本地和線上都可以下載。無亂碼~~~~


總結:網上搜了好久,還沒有找到權威解答,有一部分解釋的還有一定的道理,但是我知識淺薄,不知道是否正確,記錄下來希望大家有想法的說出來,有問題糾正出來。
關於iconv轉碼線上出問題的說法:windows系統漢字是gb2312,從utf8轉過來,沒問題,但是linux系統下漢字編碼不是GB2312,用iconv轉了也是亂碼。
關於header()的說法:header()上面添加ob_end_clean()是因為有緩存亂碼,這個是清空(擦除)緩沖區並關閉輸出緩沖,如果開始就咩有打開輸出緩沖,這個應該就沒必要了,不過好多網友都說加上這個的作用大,所以我也不管三七二十一就加上了。
對於上面寫的幾個header(),為什么可以沒亂碼,還是不知道什么原因,希望有知道原理的告知下,不要成為知其然而不知其所以然的人。謝謝大家~~~~~~~~~~~~~


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM