PHP ファイル ダウンロードのファイル名が文字化けする場合の解決策: 1. "Content-Type" を "application/octet-stream" に設定します; 2. Set "header('Content-Disposition:attachment; filename*= "utf8\'\'' . $filename . '"');} else {header(...)" で十分です。
このチュートリアルの動作環境: Windows 7 システム、PHP バージョン 8.1、Dell G3 コンピューター。
php ファイルのダウンロード ファイル名が文字化けする場合の対処方法
PHP ダウンロード ファイル名が文字化けする
Content-Type を application/ に設定することで、 octet-stream を使用すると、動的に生成されたコンテンツをファイルとしてダウンロードできます。これは誰もが知っていると思います。次に、Content-Disposition を使用して、ダウンロードしたファイル名を設定します。これは多くの人が知っています。基本的に、ダウンロード プログラムは次のように記述されます。
コードは次のとおりです。
$filename = "document.txt"; header('Content-Type: application/octet-stream'); header('Content-Disposition: attachment; filename=' . $filename); print "Hello!";
ブラウザで開くと、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-性質は次のように定義する必要があります:
コードは次のとおりです:
Content-Disposition: attachment; filename*="utf8''%E4%B8%AD%E6%96%87%20%E6%96%87%E4%BB%B6%E5%90%8D.txt"
つまり: *
ファイル名の値は、## の後の等号の前に追加する必要があります。
#ファイル名の値は、文字セット (utf8)、言語 (空)、URL コード化されたファイル名という 3 つのセクションに一重引用符で囲まれています。 二重引用符を追加することをお勧めします。そうしないと、ファイル名のスペースの後の部分が Firefox に表示されません。 urlencode の結果は、次の結果と同じではないことに注意してください。 php の urlencode 関数。PHP の urlencode スペースは置き換えられますが、ここでは に置き換える必要があります。テストの結果、いくつかの主流ブラウザのサポートは次のとおりであることが判明しました:IE6 attachment; filename="" FF3 attachment; filename="UTF-8文件名" attachment; filename*="utf8''" O9 attachment; filename="UTF-8文件名"Safari3 (Win)は対応していないみたいでしょうか?上記の方法はどれも機能しません。すべての主流ブラウザをサポートするには、プログラムを次のように記述する必要があるようです:コードは次のとおりです:
$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'; ?>推奨学習: "
PHP ビデオ チュートリアル >>
以上がPHPファイルのダウンロードのファイル名が文字化けしている場合の対処方法の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。