av手机免费在线观看,国产女人在线视频,国产xxxx免费,捆绑调教一二三区,97影院最新理论片,色之久久综合,国产精品日韩欧美一区二区三区

php語言

如何在PHP下載文件名中解決亂碼的問題

時間:2025-05-01 03:01:50 php語言 我要投稿
  • 相關(guān)推薦

如何在PHP下載文件名中解決亂碼的問題

  文章是對如何在PHP下載文件名中解決亂碼的問題進(jìn)行了詳細(xì)的分析介紹,需要的朋友參考下。

  通過把Content-Type設(shè)置為application/octet-stream,可以把動態(tài)生成的內(nèi)容當(dāng)作文件來下載,相信這個大家都會。那么用Content-Disposition設(shè)置下載的文件名,這個也有不少人知道吧。基本上,下載程序都是這么寫的:

  復(fù)制代碼 代碼如下:

  $filename = "document.txt";

  header('Content-Type: application/octet-stream');

  header('Content-Disposition: attachment; filename=' . $filename);

  print "Hello!";

  ?>

  但是,如果$filename是UTF-8編碼的,有些瀏覽器就無法正常處理了。比如把上面那個程序稍稍改一下:

  復(fù)制代碼 代碼如下:

  $filename = "中文 文件名.txt";

  header('Content-Type: application/octet-stream');

  header('Content-Disposition: attachment; filename=' . $filename);

  print "Hello!";

  ?>

  輸出的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

  經(jīng)過試驗,發(fā)現(xiàn)幾種主流瀏覽器的支持情況如下:

  IE6

  attachment; filename=""

  FF3

  attachment; filename="UTF-8文件名"

  attachment; filename*="utf8''"

  O9

  attachment; filename="UTF-8文件名"

  Safari3(Win)

  貌似不支持?上述方法都不行

  這樣看來,程序必須得這樣寫才能支持所有主流瀏覽器:

  復(fù)制代碼 代碼如下:

  $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下載文件名中解決亂碼的問題】相關(guān)文章:

解決PHP中文亂碼問題05-27

完美解決PHP中文亂碼問題07-18

php如何解決中文亂碼問題03-30

php中文亂碼問題的解決方案08-13

php各種應(yīng)用亂碼問題的解決方法05-31

關(guān)于php中文亂碼的解決方法07-09

java如何解決亂碼問題06-20

php中curlpost 時出現(xiàn)的問題解決08-12

修改注冊表解決Dreamweaver亂碼問題06-01