[請益] PHP強迫下載問題

看板PHP作者 (ChaN)時間15年前 (2010/07/16 19:46), 編輯推噓5(507)
留言12則, 3人參與, 最新討論串1/1
客戶的網站為多國語系 所以在後台上傳檔案時,都將其檔案更改檔名為數字 但客戶希望下載時可以還原本來的檔名 所以我用了語法讓下載該檔案時可以結合他原本的檔名 但經過測試,除了英文以外的語系 在IE使用時檔名會變成亂碼,Firefox、Chrome、Opera、 Safari都沒問題 想說是不是IE先天條件就不行存取非英文檔名,但我在Server設一個直接連結中文檔名的 超連結 IE又可以正確的下載中文檔名檔案 不知道是否可以在PHP端這邊透過宣告使IE可以正常下載 <?php if (isset($_GET['download'])) { $source = 'test.rar'; $name = '測試'; header("Content-Type: application/octet-stream"); header("Content-Disposition: attachment; filename=$name.rar"); readfile($source); exit; } ?> <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "" rel="nofollow">http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> <html xmlns="" rel="nofollow">http://www.w3.org/1999/xhtml"> <head> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <title>download</title> </head> <body> <a href="測試.rar">test</a><br /> <a href="test.php?download=1">download</a> </body> </html> -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 114.32.163.57

07/16 20:32, , 1F
抓agent判斷是IE browser的話urlencode($name)..
07/16 20:32, 1F

07/19 13:55, , 2F
判斷一下客戶端的Browser, 如果是IE了話用iconv轉成big5
07/19 13:55, 2F

07/19 13:58, , 3F
if (strstr($_SERVER['HTTP_USER_AGENT'], "MSIE"))
07/19 13:58, 3F

07/19 13:58, , 4F
{
07/19 13:58, 4F

07/19 14:00, , 5F
header('Content-Disposition: attachment; filename="'
07/19 14:00, 5F

07/19 14:01, , 6F
.iconv('utf-8','big5',$file_name).'"');
07/19 14:01, 6F

07/19 14:04, , 7F
可以參考這篇 #1BAoOoxZ (PHP)
07/19 14:04, 7F

07/20 12:32, , 8F
轉big5可以解決,但因為是多國語言,所以還有日文之類的
07/20 12:32, 8F

07/20 12:32, , 9F
不知道有沒有一勞永逸的方法
07/20 12:32, 9F

07/20 18:20, , 10F
那就用1F的方法吧 XD 我以為只有中文
07/20 18:20, 10F

07/20 18:25, , 11F
把iconv改成一樓的 urlencode
07/20 18:25, 11F

07/23 16:46, , 12F
目前使用urlencode這個方式解決
07/23 16:46, 12F
文章代碼(AID): #1CG4QanR (PHP)
文章代碼(AID): #1CG4QanR (PHP)