這篇文章主要介紹php生成文件名亂碼的解決方法,文中介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們一定要看完!
創(chuàng)新互聯(lián)是一家集網(wǎng)站建設(shè),琿春企業(yè)網(wǎng)站建設(shè),琿春品牌網(wǎng)站建設(shè),網(wǎng)站定制,琿春網(wǎng)站建設(shè)報(bào)價(jià),網(wǎng)絡(luò)營(yíng)銷,網(wǎng)絡(luò)優(yōu)化,琿春網(wǎng)站推廣為一體的創(chuàng)新建站企業(yè),幫助傳統(tǒng)企業(yè)提升企業(yè)形象加強(qiáng)企業(yè)競(jìng)爭(zhēng)力??沙浞譂M足這一群體相比中小企業(yè)更為豐富、高端、多元的互聯(lián)網(wǎng)需求。同時(shí)我們時(shí)刻保持專業(yè)、時(shí)尚、前沿,時(shí)刻以成就客戶成長(zhǎng)自我,堅(jiān)持不斷學(xué)習(xí)、思考、沉淀、凈化自己,讓我們?yōu)楦嗟钠髽I(yè)打造出實(shí)用型網(wǎng)站。
php生成文件名亂碼的解決辦法:1、將所有的+號(hào)替換為“%20”;2、添加“header("Content-type: application/vnd.ms-excel");”;3、刪除“filename=xxx”兩邊的空格。
PHP導(dǎo)出文件名亂碼解決
問題場(chǎng)景:
統(tǒng)計(jì)數(shù)據(jù)需要增加一個(gè)到處excel功能, 于是使用composer安裝了phpspreadsheet組件,進(jìn)行數(shù)據(jù)處理并導(dǎo)出。遇到ASCII命名的文件名時(shí), 都是導(dǎo)出一切正常, 但是遇到中文文件名時(shí),導(dǎo)出的文件名是亂碼的。
此處直接貼出解決方案:
1. 文件名處理
因?yàn)镻HP的urlencode函數(shù)會(huì)將各種空白字符轉(zhuǎn)碼為+號(hào), 這個(gè)+號(hào)無論是chrome還是Firefox都是不會(huì)轉(zhuǎn)義的
所以此處將所有的+號(hào)再次替換為%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)出的是一個(gè)文件,不是確定的excel類型時(shí),使用文件頭No.1
我導(dǎo)出的是一個(gè)excel下xls格式的表格,所以, 我使用的是文件頭No.2
// 文件頭No.1: 告訴瀏覽器這里要有一個(gè)文件流輸出 header("Content-type: application/octet-stream"); // 文件頭No.2: 告訴瀏覽器這里要輸出一個(gè)excel文件 header("Content-type: application/vnd.ms-excel");
頭文件: 下載文件名聲明
這一步是關(guān)鍵, 有兩個(gè)需要注意的地方
無論是filename=xxx還是filename*=xxx, 等號(hào)兩邊不要有空格
filename*=xxx, 這個(gè)配置項(xiàng)其實(shí)是由3部分組成的, 分別是字符集(utf8)、語言(空)和urlencode過的文件名, 其中, 語言是一個(gè)空字符串, 用單引號(hào)引起來, 三個(gè)部分之間不要有空格。
header('Content-Disposition: attachment; filename="foo-%c3%a4.xls"; filename*=UTF-8\'\'foo-%c3%a4.xls');
我采用如上代碼分別使用chrome, firefox, 360, ie11測(cè)試均運(yùn)作良好。希望也能幫到你。
以上是“php生成文件名亂碼的解決方法”這篇文章的所有內(nèi)容,感謝各位的閱讀!希望分享的內(nèi)容對(duì)大家有幫助,更多相關(guān)知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道!