ホームページ >バックエンド開発 >PHPチュートリアル >ファイルをダウンロードするための PHP 実装コードとファイル名の文字化けの解決策

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

高洛峰
高洛峰オリジナル
2016-12-23 12:44:051199ブラウズ

最近、ファイルをダウンロードする方法を尋ねられました。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"); 
?>

ブラウザで開くと、document.txtをダウンロードできます。

ただし、$filename が UTF-8 でエンコードされている場合、一部のブラウザーはそれを適切に処理できません。たとえば、上記のプログラムを少し変更します。

<?php 
$filename = "document.txt"; 
header(&#39;Content-Type: application/octet-stream&#39;); 
header(&#39;Content-Disposition: attachment; filename=&#39; . $filename); 
print "Hello!"; 
?>

UTF-8 エンコードでプログラムを保存してアクセスすると、IE6 でダウンロードされたファイル名が文字化けします。 FF3でダウンロードしたファイル名には「中国語」という単語しか入っていません。 Opera 9 ではすべて正常に動作します。

出力ヘッダーは実際には次のようになります:

Content-Disposition:attachment; filename=中国語のファイル名.txt 実際、RFC2231 の定義によれば、多言語エンコーディング Content-Disposition は次のように定義される必要があります:

<?php 
$filename = "中文 文件名.txt"; 
header(&#39;Content-Type: application/octet-stream&#39;); 
header(&#39;Content-Disposition: attachment; filename=&#39; . $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&#39;&#39;%E4%B8%AD%E6%96%87%20%E6%96%87%E4%BB%B6%E5%90%8D.txt"

ファイルをダウンロードするための PHP 実装コードとファイル名の文字化けの解決策については、PHP に注意してください。関連記事の中国語サイト!

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。