php產生檔案名稱亂碼的解決方法:1、將所有的號碼替換為「」;2、新增「header("Content-type: application/vnd.ms-excel");」;3 、刪除「filename=xxx」兩邊的空格。
本文操作環境:Windows7系統、PHP7.1版,DELL G3電腦
PHP匯出檔案名稱亂碼解決
問題場景:
統計資料需要增加一個到處excel功能, 於是使用composer安裝了phpspreadsheet元件,進行資料處理並匯出。遇到ASCII命名的檔名時, 都是導出一切正常, 但是遇到中文檔名時,導出的檔名是亂碼的。
此處直接貼出解決方案:
1. 檔名處理
因為PHP的urlencode函數會將各種空白字元轉碼為號, 這個號無論是chrome還是Firefox都是不會轉義的
所以這裡將所有的號再次替換為
$file_name = '导出文件.xls'; // 这是原本要导出的文件名 $encoded_filename = url_encode($file_name);// 将文件名进行urlencode转码 $encoded_filename = str_replace('+', '%20', $encoded_filename);
#2 . 頭文件:文件類型聲明
如果導出的是一個文件,不是確定的excel類型時,使用文件頭No.1
我導出的是一個excel下xls格式的表格,所以, 我使用的是文件頭 No.2
// 文件头No.1: 告诉浏览器这里要有一个文件流输出 header("Content-type: application/octet-stream"); // 文件头No.2: 告诉浏览器这里要输出一个excel文件 header("Content-type: application/vnd.ms-excel");
頭檔: 下載檔名宣告
這一步是關鍵, 有兩個需要注意的地方
無論是filename=xxx或filename*=xxx, 等號兩邊不要有空格
filename*=xxx, 這個設定項其實是由3部分組成的, 分別是字元集(utf8)、語言(空)和urlencode過的檔名, 其中, 語言是一個空字串, 用單引號引起來, 三個部分之間不要有空格。
header('Content-Disposition: attachment; filename="foo-%c3%a4.xls"; filename*=UTF-8\'\'foo-%c3%a4.xls');
我採用如上程式碼分別使用chrome, firefox, 360, ie11測試都運作良好。希望也能幫到你。
【推薦學習:PHP影片教學】
#以上是如何解決php產生檔名亂碼問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!