ホームページ  >  記事  >  バックエンド開発  >  PHPダウンロードファイル名文字化け問題の解決方法を解析_PHPチュートリアル

PHPダウンロードファイル名文字化け問題の解決方法を解析_PHPチュートリアル

WBOY
WBOYオリジナル
2016-07-21 15:04:47883ブラウズ

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 を使用して、ダウンロードしたテキストを設定します...
声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。