<address id="ousso"></address>
<form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
  1. php語言

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

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

    如何在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!";

      ?>

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

      復制代碼 代碼如下:

      $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應該這么定義:

      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會把空格替換成+,而這里需要替換成%20

      經過試驗,發現幾種主流瀏覽器的支持情況如下:

      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中文亂碼問題05-27

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

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

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

    php各種應用亂碼問題的解決方法05-31

    關于php中文亂碼的解決方法07-09

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

    php中curlpost 時出現的問題解決08-12

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

    <address id="ousso"></address>
    <form id="ousso"><track id="ousso"><big id="ousso"></big></track></form>
    1. 日日做夜狠狠爱欧美黑人