Re: [請益] 請問header()函式 中文名稱下載問題

看板PHP作者 (請吱解我)時間18年前 (2007/07/22 12:25), 編輯推噓3(307)
留言10則, 3人參與, 最新討論串2/2 (看更多)
問題的癥結在於IE沒辦法自己判斷你的檔名是什麼編碼 所以他會用預設的編碼去解釋你的檔名 Fx自己會辨識就不會有這種問題 CA4Z0ZZK這個應該是IE cache的檔名 作法有兩個 1.把檔名都變成預設編碼 $fn=iconv('utf-8','big5',$fn); 2.把檔名urlencode 因為這只有IE適用 Fx的會直接把encode出來的東西(%XX)直接顯示出來 所以要判斷瀏覽器是IE的時候才 $fn=urlencode($fn); p.s 這裡預設的編碼 好像伺服器的設定也可以決定 不過這方面我就沒試過了 ※ 引述《gmoz (Gmoz)》之銘言: : $query = "SELECT * FROM uploads WHERE upload_id = {$_GET['uid']}"; : $result = mysql_query($query); : mysql_query("SET CHARACTER SET 'utf8'"); //這行試過了ˊˋ : $row=mysql_fetch_array($result); : $fn=$row['file_name']; : $extension = explode('.' , $fn); : $the_file='../uploads/'.$_GET['uid'].'.'.$extension[1]; : header("Content-disposition:attachment;filename=$fn"); : readfile ($the_file); : 小弟要做的是個讓人上傳東西,然後可下載的網頁 : 使用view_files.php傳出uid連到download_fils.php來執行如上的PHP碼 : 英文檔名沒問題,可正常顯示檔名並且下載 : 遇到中文檔名時 (把$fn使用echo印出來是正確的原檔名) : 但是放到header之後檔名卻出現CA4Z0ZZK.等等的英文字和數字(而且每次點都不一樣) : 由於屆時上傳檔案的可能會包含些公家機關, : 因此不能上傳中文檔名可能會造成不便 : 希望各位前輩能幫忙解答,小弟感激不敬 : appsev 2.5.5 : php5 : phpMyAdmin 2.6.4-pl4 : MySQL 版本 5.0.16-nt -- ※ 發信站: 批踢踢實業坊(ptt.cc) ◆ From: 123.193.33.6

07/22 13:04, , 1F
我最後是無意間把mysql_query("SET CHARACTER SET 'UTF8'")
07/22 13:04, 1F

07/22 13:04, , 2F
改成mysql_query("SET CHARACTER SET 'big5'")就解決了 q_q
07/22 13:04, 2F

07/22 13:05, , 3F
還有作法1不行 原因好像是參數傳入時就是中文了(?
07/22 13:05, 3F

07/22 15:29, , 4F
...
07/22 15:29, 4F

07/23 12:18, , 5F
下載檔案沒人在做中文檔名下載的 = ="
07/23 12:18, 5F

07/23 12:18, , 6F
額外還要判斷OS 是WIN的話要送BIG5 MAC送utf-8
07/23 12:18, 6F

07/23 12:19, , 7F
何必咧~~ 隨機取個英文ID自已送不就好了 ...
07/23 12:19, 7F

07/23 13:04, , 8F
我存在主機中檔名是英文的 下載時會自動更名為原來的檔名
07/23 13:04, 8F

07/23 13:07, , 9F
K大 我不懂你的第三行 ._.
07/23 13:07, 9F

07/23 13:08, , 10F
說錯 主機中檔名是uid的值
07/23 13:08, 10F
文章代碼(AID): #16ejn8y_ (PHP)
文章代碼(AID): #16ejn8y_ (PHP)