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!";
?>
出力ヘッダーは実際には次のようになります:
Content-Disposition :attachment; filename=中国語ファイル名.txt 実際には、RFC2231 の定義によれば、多言語エンコーディング
Content-Disposition は次のように定義する必要があります。 E4%B8%AD%E6%96 %87%20%E6%96%87%E4%BB%B6%E5%90%8D.txt」つまり:
•ファイル名の後の等号の前に * を追加します
•filename の値は、文字セット (utf8)、言語 (空)、および URL コード化されたファイル名という単一引用符で囲まれた 3 つの段落に分割されます。
•二重引用符を追加することをお勧めします。そうしないと、ファイル名のスペースの後の部分が Firefox に表示されません。
•urlencode の結果は、PHP の urlencode 関数の結果と同じではないことに注意してください。スペースは + で、これは %20 に置き換える必要があります。
テストの結果、いくつかの主流ブラウザのサポートは次のとおりであることがわかりました。 ; filename="UTF-8 ファイル名"
attachment; filename*="utf8''"O9
attachment; filename="UTF-8 ファイル名"
サポートされていないようです。
上記の方法は機能しません
すべての主流ブラウザをサポートするには、プログラムを次のように記述する必要があるようです: コードをコピーします
コードは次のとおりです:
$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';
?>
http://www.bkjia.com/PHPjc/327739.html
www.bkjia.com
本当
http://www.bkjia.com/PHPjc/327739.html
技術記事
Content-Type を application/octet-stream に設定すると、動的に生成されたコンテンツをファイルとしてダウンロードできることは誰もが知っていると思います。次に、Content-Disposition を使用して、ダウンロードしたテキストを設定します...