溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點(diǎn)擊 登錄注冊 即表示同意《億速云用戶服務(wù)條款》

php生成文件名亂碼的解決方法

發(fā)布時間:2021-04-02 10:00:52 來源:億速云 閱讀:312 作者:小新 欄目:編程語言

這篇文章主要介紹php生成文件名亂碼的解決方法,文中介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們一定要看完!

php生成文件名亂碼的解決辦法:1、將所有的+號替換為“%20”;2、添加“header("Content-type: application/vnd.ms-excel");”;3、刪除“filename=xxx”兩邊的空格。

PHP導(dǎo)出文件名亂碼解決

問題場景:

統(tǒng)計(jì)數(shù)據(jù)需要增加一個到處excel功能, 于是使用composer安裝了phpspreadsheet組件,進(jìn)行數(shù)據(jù)處理并導(dǎo)出。遇到ASCII命名的文件名時, 都是導(dǎo)出一切正常, 但是遇到中文文件名時,導(dǎo)出的文件名是亂碼的。

此處直接貼出解決方案:

1. 文件名處理

因?yàn)镻HP的urlencode函數(shù)會將各種空白字符轉(zhuǎn)碼為+號, 這個+號無論是chrome還是Firefox都是不會轉(zhuǎn)義的

所以此處將所有的+號再次替換為%20

$file_name = '導(dǎo)出文件.xls'; // 這是原本要導(dǎo)出的文件名
$encoded_filename = url_encode($file_name);// 將文件名進(jìn)行urlencode轉(zhuǎn)碼
$encoded_filename = str_replace('+', '%20', $encoded_filename);

2. 頭文件:文件類型聲明

如果導(dǎo)出的是一個文件,不是確定的excel類型時,使用文件頭No.1

我導(dǎo)出的是一個excel下xls格式的表格,所以, 我使用的是文件頭No.2

// 文件頭No.1: 告訴瀏覽器這里要有一個文件流輸出
header("Content-type: application/octet-stream");
// 文件頭No.2: 告訴瀏覽器這里要輸出一個excel文件
header("Content-type: application/vnd.ms-excel");

頭文件: 下載文件名聲明

這一步是關(guān)鍵, 有兩個需要注意的地方

無論是filename=xxx還是filename*=xxx, 等號兩邊不要有空格

filename*=xxx, 這個配置項(xiàng)其實(shí)是由3部分組成的, 分別是字符集(utf8)、語言(空)和urlencode過的文件名, 其中, 語言是一個空字符串, 用單引號引起來, 三個部分之間不要有空格。

header('Content-Disposition: attachment; filename="foo-%c3%a4.xls"; filename*=UTF-8\'\'foo-%c3%a4.xls');

我采用如上代碼分別使用chrome, firefox, 360, ie11測試均運(yùn)作良好。希望也能幫到你。

以上是“php生成文件名亂碼的解決方法”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對大家有幫助,更多相關(guān)知識,歡迎關(guān)注億速云行業(yè)資訊頻道!

向AI問一下細(xì)節(jié)

免責(zé)聲明:本站發(fā)布的內(nèi)容(圖片、視頻和文字)以原創(chuàng)、轉(zhuǎn)載和分享為主,文章觀點(diǎn)不代表本網(wǎng)站立場,如果涉及侵權(quán)請聯(lián)系站長郵箱:is@yisu.com進(jìn)行舉報(bào),并提供相關(guān)證據(jù),一經(jīng)查實(shí),將立刻刪除涉嫌侵權(quán)內(nèi)容。

php
AI