<pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

          <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

          <p id="bbfd9"></p>

          <p id="bbfd9"><cite id="bbfd9"></cite></p>

            <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

            <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
            <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
            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

                    <pre id="bbfd9"><del id="bbfd9"><dfn id="bbfd9"></dfn></del></pre>

                    <ruby id="bbfd9"></ruby><p id="bbfd9"><mark id="bbfd9"></mark></p>

                    <p id="bbfd9"></p>

                    <p id="bbfd9"><cite id="bbfd9"></cite></p>

                      <th id="bbfd9"><form id="bbfd9"><dl id="bbfd9"></dl></form></th>

                      <p id="bbfd9"><cite id="bbfd9"></cite></p><p id="bbfd9"></p>
                      <p id="bbfd9"><cite id="bbfd9"><progress id="bbfd9"></progress></cite></p>
                      飘沙影院