ファイルをダウンロードするための PHP 実装コードとファイル名の文字化けの解決策_PHP チュートリアル

WBOY
リリース: 2016-07-21 15:31:32
オリジナル
885 人が閲覧しました

最近、ある人からファイルのダウンロード方法を尋ねられました。php メソッドは次のとおりです:

コードをコピーします コードは次のとおりです:

header("Content-Type: application/ force-download") ;
header("Content-Disposition:attachment; filename=ins.jpg");
readfile("imgs/test_Zoom.jpg");
?>

コードの最初の行は強制されますダウンロード;
2 行目のコードは、ダウンロードしたコンテンツに名前を割り当てることです。
コードの 3 行目は、ダウンロードしたコンテンツをファイルに読み込みます。
PHPダウンロードファイル名の文字化けを解決する方法
Content-Typeをapplication/octet-streamに設定することで、動的に生成されたコンテンツをファイルとしてダウンロードできることは皆さんご存知かと思います。次に、Content-Disposition を使用して、ダウンロードしたファイル名を設定します。これは多くの人が知っています。基本的に、ダウンロード プログラムは次のように記述されます:
コードをコピーします コードは次のとおりです:

$filename = "document.txt"
header('Content-Type: application/octet -stream');
header('Content-Disposition:attachment; filename=' . $filename);
?> ブラウザで開くとダウンロードできます。 document.txt 。
ただし、$filename が UTF-8 でエンコードされている場合、一部のブラウザーはそれを適切に処理できません。たとえば、上記のプログラムを少し変更します。


コードをコピーします
コードは次のとおりです: $filename = "中国語のファイル名.txt"
header('Content-Type : application/octet -stream');
header('Content-Disposition:attachment; filename=' . $filename);
print "Hello!"> プログラムを UTF-8 エンコードで保存します。再度アクセスするとIE6ダウンロード ファイル名が文字化けします。 FF3でダウンロードしたファイル名には「中国語」という単語しか入っていません。 Opera 9 ではすべて正常に動作します。
出力ヘッダーは実際には次のようになります:
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)、言語 (空)と URL エンコードされたファイル名。
二重引用符を追加することをお勧めします。そうしないと、ファイル名のスペースの後の部分が Firefox に表示されません。
urlencode の結果は、PHP の urlencode 関数の結果と同じではないことに注意してください。スペースは置き換えられます。 + は必須です。%20 に置き換えてください。
テストの結果、いくつかの主流ブラウザのサポートは次のとおりであることが判明しました:
IE6 添付ファイル名=""添付ファイル名 = "UTF-8 ファイル名"
添付ファイル名 * = "utf8''
O9 ファイル名 = "UTF-8 ファイル名"
Safari3 )はサポートしていないようですか?上記の方法はどれも機能しません
すべての主要なブラウザをサポートするには、プログラムを次のように記述する必要があるようです:



コードをコピーします

コードは次のとおりです:


$ua = $_SERVER["HTTP_USER_AGENT"] ;
$filename = "中国語のファイル名.txt"; $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/322984.html

www.bkjia.com

tru​​e

http://www.bkjia.com/PHPjc/322984.html

技術記事

最近、ある人からファイルのダウンロード方法を尋ねられました。php のメソッドは次のとおりです。次のようにコードをコピーします。 ?php header("Content-Type: application/force-download");

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート