ホームページ >バックエンド開発 >PHPチュートリアル >ファイルをダウンロードするための PHP 実装コードとファイル名の文字化けの解決策
最近、ファイルをダウンロードする方法を尋ねられました。PHP のメソッドは次のとおりです。
コードの最初の行は、ダウンロードを強制するものです。コードの 2 行目は、ダウンロードしたコンテンツに名前を割り当てます。コード行はファイルをダウンロードするもので、内容がファイルに読み込まれます。
PHPダウンロードファイル名の文字化けを解決する方法
Content-Typeをapplication/octet-streamに設定することで、動的に生成されたコンテンツをファイルとしてダウンロードできることは皆さんご存知かと思います。次に、Content-Disposition を使用して、ダウンロードしたファイル名を設定します。これは多くの人が知っています。基本的に、ダウンロードプログラムは次のように書かれています:
<?php header("Content-Type: application/force-download"); header("Content-Disposition: attachment; filename=ins.jpg"); readfile("imgs/test_Zoom.jpg"); ?>
<?php $filename = "document.txt"; header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . $filename); print "Hello!"; ?>
Content-Disposition:attachment; filename=中国語のファイル名.txt 実際、RFC2231 の定義によれば、多言語エンコーディング Content-Disposition は次のように定義される必要があります:
<?php $filename = "中文 文件名.txt"; header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . $filename); print "Hello!"; ?>
ファイル名の値は、文字セット (utf8)、言語 (空)、および URL コード化されたファイル名である一重引用符で囲まれた 3 つのセグメントに分割されます。
二重引用符を追加することをお勧めします。そうしないと、ファイル名のスペースの後の部分が Firefox に表示されません。
urlencode の結果は、PHP の urlencode 関数の結果と同じではないことに注意してください。スペースは置き換えられます。 + は必須です。%20 に置き換えてください。
テストの結果、いくつかの主流ブラウザのサポートは次のとおりであることが判明しました:
IE6 添付ファイル名="de7063d3a5461ba7e23cf5a413f7dfb8"添付ファイル名 = "UTF-8 ファイル名"
添付ファイル名 * = "utf8''
O9 ファイル名 = "UTF-8 ファイル名"
Safari3 )はサポートしていないようですか?上記の方法はどれも機能しません
主流のブラウザをすべてサポートするには、プログラムを次のように記述する必要があるようです: Content-Disposition: attachment; filename*="utf8''%E4%B8%AD%E6%96%87%20%E6%96%87%E4%BB%B6%E5%90%8D.txt"
ファイルをダウンロードするための PHP 実装コードとファイル名の文字化けの解決策については、PHP に注意してください。関連記事の中国語サイト!