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中文網其他相關文章!