ホームページ > バックエンド開発 > PHPチュートリアル > PHP添付ファイルダウンロード時の中国語名が文字化けする問題の解決策

PHP添付ファイルダウンロード時の中国語名が文字化けする問題の解決策

WBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWBOYWB
リリース: 2016-07-29 09:10:10
オリジナル
851 人が閲覧しました

この記事の例では、PHP 添付ファイルのダウンロードの中国語名が文字化けする問題の解決策を説明します。参考までに皆さんと共有してください。詳細は次のとおりです:

PHPでは、ダウンロードするファイルの名前が中国語の場合、ファイルタイトルが文字化けします。

この時点で、タイトルをエンコードする必要があります。つまり、高度な URLencode を意味し、ヘッダーを挿入すると、問題は解決されます。

$filename = urlencode("下载文档");
header ( "Content-disposition: attachment; filename=$filename.xls" );

ログイン後にコピー

RFC2231 の定義では、多言語エンコーディングの Content-Disposition を次のように定義する必要があるとオンラインで言われています:

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

Content-処理: filename*="utf8' '%E6%B5%8B%E8%AF%95.html"


つまり:

ファイル名の後の等号の前に * を追加します
ファイル名の値は除算されます単一引用符で囲まれた 3 つのセクションに分割されます。これらのセクションは、文字セット (utf8)、言語 (空)、および URL コード化されたファイル名です。

なのでこの時、ファイル名はurlエンコード変換する必要があります

$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 . '"');
}

ログイン後にコピー

PHPのurlencodeを使うと簡単に出来ます

この記事がPHPプログラミングに携わる皆様のお役に立てれば幸いです。

上記は、URL エンコードを含む、PHP 添付ファイルのダウンロードの中国語名が文字化けする場合の解決策を紹介しました。PHP チュートリアルに興味のある友人に役立つことを願っています。 🎜 🎜 🎜
関連ラベル:
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート