php檔案下載檔案名稱亂碼的解決方法:1、把「Content-Type」設定為「application/octet-stream」;2、設定「header('Content-Disposition: attachment; filename*= "utf8\'\'' . $filename . '"');} else {header(...)」即可。
本教學操作環境:windows7系統、PHP8.1版、Dell G3電腦。
php 檔案下載檔案名稱亂碼怎麼辦
PHP下載檔案名稱解決亂碼
透過把Content-Type設定為application/octet-stream ,可以把動態生成的內容當作文件來下載,相信這個大家都會。那麼用Content-Disposition設定下載的檔名,這個也有不少人知道吧。基本上,下載程式都是這麼寫的:
程式碼如下:
$filename = "document.txt"; header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . $filename); print "Hello!";
這樣用瀏覽器開啟之後,就可以下載document.txt。
但是,如果$filename是UTF-8編碼的,有些瀏覽器就無法正常處理了。例如把上面那個程式稍稍改一下:
程式碼如下:
$filename = "中文 文件名.txt"; header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . $filename); print "Hello!";
把程式儲存成UTF-8編碼再訪問,IE6下載的檔名就會亂碼。 FF3下下載的檔名就只有「中文」兩個字。 Opera 9下一切正常。
輸出的header其實是這樣子:
Content-Disposition: attachment; filename=中文檔案名稱.txt其實按照RFC2231的定義,多語言編碼的Content-Disposition應該這麼定義:
程式碼如下:
Content-Disposition: attachment; filename*="utf8''%E4%B8%AD%E6%96%87%20%E6%96%87%E4%BB%B6%E5%90%8D.txt"
即:
filename後面的等號之前要加*
filename的值用單引號分成三段,分別是字元集(utf8)、語言(空)和urlencode過的檔名。
最好加上雙引號,否則檔案名稱中空格後面的部分在Firefox中顯示不出來
注意urlencode的結果與php的urlencode函數結果不太相同,php的urlencode會把空格替換成,而這裡需要替換成
經過試驗,發現幾種主流瀏覽器的支援情況如下:
IE6 attachment; filename="" FF3 attachment; filename="UTF-8文件名" attachment; filename*="utf8''" O9 attachment; filename="UTF-8文件名"
Safari3(Win) 似乎不支援?上述方法都不行
這樣看來,程式必須這樣寫才能支援所有主流瀏覽器:
#程式碼如下:
$ua = $_SERVER["HTTP_USER_AGENT"]; $filename = "中文 文件名.txt"; $encoded_filename = urlencode($filename); $encoded_filename = str_replace("+", "%20", $encoded_filename); header('Content-Type: application/octet-stream'); if (preg_match("/MSIE/", $ua)) { header('Content-Disposition: attachment; filename="' . $encoded_filename . '"'); } else if (preg_match("/Firefox/", $ua)) { header('Content-Disposition: attachment; filename*="utf8\'\'' . $filename . '"'); } else { header('Content-Disposition: attachment; filename="' . $filename . '"'); } print 'ABC'; ?>
推薦學習:《PHP影片教學》
以上是php 檔案下載檔名亂碼怎麼辦的詳細內容。更多資訊請關注PHP中文網其他相關文章!

本文比較了酸和基本數據庫模型,詳細介紹了它們的特徵和適當的用例。酸優先確定數據完整性和一致性,適合財務和電子商務應用程序,而基礎則側重於可用性和

本文討論了確保PHP文件上傳的確保,以防止諸如代碼注入之類的漏洞。它專注於文件類型驗證,安全存儲和錯誤處理以增強應用程序安全性。

本文討論了在PHP中實施API速率限制的策略,包括諸如令牌桶和漏水桶等算法,以及使用Symfony/Rate-limimiter之類的庫。它還涵蓋監視,動態調整速率限制和手

本文討論了使用password_hash和pyspasswify在PHP中使用密碼的好處。主要論點是,這些功能通過自動鹽,強大的哈希算法和SECH來增強密碼保護

本文討論了OWASP在PHP和緩解策略中的十大漏洞。關鍵問題包括注射,驗證損壞和XSS,並提供用於監視和保護PHP應用程序的推薦工具。


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

Video Face Swap
使用我們完全免費的人工智慧換臉工具,輕鬆在任何影片中換臉!

熱門文章

熱工具

SublimeText3 Linux新版
SublimeText3 Linux最新版

Atom編輯器mac版下載
最受歡迎的的開源編輯器

SecLists
SecLists是最終安全測試人員的伙伴。它是一個包含各種類型清單的集合,這些清單在安全評估過程中經常使用,而且都在一個地方。 SecLists透過方便地提供安全測試人員可能需要的所有列表,幫助提高安全測試的效率和生產力。清單類型包括使用者名稱、密碼、URL、模糊測試有效載荷、敏感資料模式、Web shell等等。測試人員只需將此儲存庫拉到新的測試機上,他就可以存取所需的每種類型的清單。

SublimeText3漢化版
中文版,非常好用

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)