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

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

WBOY
リリース: 2016-07-13 17:42:33
オリジナル
802 人が閲覧しました

Content-Type を application/octet-stream に設定すると、動的に生成されたコンテンツをファイルとしてダウンロードできることは誰もが知っていると思います。次に、Content-Disposition を使用して、ダウンロードしたファイル名を設定します。これは多くの人が知っています。基本的に、ダウンロード プログラムは次のように記述されます:

リーリー

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

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

リーリー

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

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

リーリー

実際、RFC2231 の定義によれば、多言語エンコーディングの Content-Disposition は次のように定義される必要があります:

リーリー

つまり:

  • ファイル名の後の等号の前に*
  • を追加します
  • filename の値は、文字セット (utf8)、言語 (空)、および URL コード化されたファイル名という単一引用符で囲まれた 3 つのセグメントに分割されます。
  • 二重引用符を追加することをお勧めします。そうしないと、ファイル名のスペースの後の部分が Firefox で表示されません
  • urlencode の結果は、php の urlencode 関数の結果と同じではないことに注意してください。PHP の urlencode はスペースを + に置き換えます。ここでは、%20 に置き換える必要があります

テストの結果、いくつかの主流ブラウザのサポートは次のとおりであることが判明しました:

IE6 添付ファイル名=""
FF3 添付ファイル名 = "UTF-8 ファイル名"
添付ファイル名*="utf8"
O9 添付ファイル名 = "UTF-8 ファイル名"
Safari3(Win) サポートされていないようです?上記の方法はどれも機能しません

すべての主要なブラウザをサポートするには、プログラムを次のように記述する必要があるようです:

リーリー

www.bkjia.comtru​​ehttp://www.bkjia.com/PHPjc/486039.html技術記事 Content-Type を application/octet-stream に設定すると、動的に生成されたコンテンツをファイルとしてダウンロードできることは誰もが知っていると思います。次に、Content-Disposition を使用して、ダウンロードしたテキストを設定します...
ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート