首頁  >  文章  >  後端開發  >  如何解決php產生檔名亂碼問題

如何解決php產生檔名亂碼問題

藏色散人
藏色散人原創
2021-04-02 09:07:522409瀏覽

php產生檔案名稱亂碼的解決方法:1、將所有的號碼替換為「」;2、新增「header("Content-type: application/vnd.ms-excel");」;3 、刪除「filename=xxx」兩邊的空格。

如何解決php產生檔名亂碼問題

本文操作環境: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中文網其他相關文章!

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