国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁 > 開發(fā) > PHP > 正文

php實現(xiàn)中文文件名文件下載

2024-05-04 21:56:58
字體:
供稿:網(wǎng)友

有很多朋友下載文件時都是把中文名轉(zhuǎn)換在英文或全數(shù)字的然后再進行下載,下面我來介紹直接利用中文文件名文件下載并且不出現(xiàn)亂碼的解決辦法,代碼如下:

  1. <?php 
  2. $filename = "中文 文件名.txt"
  3. header('Content-Type: application/octet-stream'); 
  4. header('Content-Disposition: attachment; filename=' . $filename); 
  5. print "Hello!"
  6. ?> 

把程序保存成UTF-8編碼再訪問,IE6下載的文件名就會亂碼,FF3下下載的文件名就只有“中文”兩個字,Opera 9下一切正常,輸出的header實際上是這樣子:

Content-Disposition: attachment; filename=中文 文件名.txt

其實按照RFC2231的定義,多語言編碼的Content-Disposition,應(yīng)該這么定義:

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的結(jié)果與php的urlencode函數(shù)結(jié)果不太相同,php的urlencode會把空格替換成+,而這里需要替換成%20

實例代碼如下:

  1. <?php 
  2.     $file = "/tmp/中文名.tar.gz"
  3.     $filename = basename($file); 
  4.     header("Content-type: application/octet-stream"); 
  5.     //處理中文文件名 
  6.     $ua = $_SERVER["HTTP_USER_AGENT"]; 
  7.     $encoded_filename = urlencode($filename); 
  8.     $encoded_filename = str_replace("+""%20"$encoded_filename); 
  9.     if (preg_match("/MSIE/"$ua)) { 
  10.      header('Content-Disposition: attachment; filename="' . $encoded_filename . '"'); 
  11.     } else if (preg_match("/Firefox/"$ua)) { 
  12.      header("Content-Disposition: attachment; filename*="utf8''" . $filename . '"'); 
  13.     } else { 
  14.      header('Content-Disposition: attachment; filename="' . $filename . '"'); 
  15.     } 
  16.     header('Content-Disposition: attachment; filename="' . $filename . '"'); 
  17.     header("Content-Length: "filesize($file)); 
  18.     readfile($file); 
  19. ?> 

這樣我們就完全解決了中文文名亂碼這個問題了。

發(fā)表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發(fā)表
主站蜘蛛池模板: 鱼台县| 绥芬河市| 鄂托克旗| 蒙城县| 泰安市| 理塘县| 开远市| 桦川县| 高台县| 汉沽区| 高安市| 雅江县| 荔波县| 公安县| 宝坻区| 巴里| 三原县| 三明市| 科技| 贞丰县| 保德县| 康平县| 浙江省| 古交市| 安化县| 崇信县| 江阴市| 井冈山市| 灵山县| 儋州市| 阳高县| 平泉县| 留坝县| 龙江县| 衡阳市| 临安市| 静海县| 扎赉特旗| 奉节县| 湖南省| 滨海县|