LoginSignup
0
0

More than 5 years have passed since last update.

Perlでファイル名の文字化けIE対応

Posted at

めちゃくちゃ苦戦しました。IE滅ぶべし†
調べてもPHPの記事しかでてこないんですよね。ということで、自分と同じ状況になっているパーラーを助けるべく記事として残します。

解決策

いってしまうとこれでOKです。レスポンスヘッダにファイル名を明記します。

# 日本語ファイル名である、$file_nameを引数として受け取る

$c->res->header(
       'content_disposition' => "attachment;
                                 filename=$file_name.csv;
                                 filename*=UTF-8''$file_name.csv",
   );

filenameが2行あるのがミソで、filename*が有効なブラウザではfilename側は無視されるという特徴を突いた記述になります。

参考)https://tools.ietf.org/html/rfc6266#section-4.3

もちろん、日本語のファイル名を渡す際にURIエンコードしてくださいね!


use URI::Escape;
$file_name = URI::Escape::uri_escape($file_name);
  • 日本語ファイル名はURIエンコードして渡す
  • 日本語でないファイル名は通常通り渡す
    • 別にURIエンコードしてもOK!

このルールさえ徹底すれば、日本語ファイルでも問題なく全ブラウザでエンコードする事ができます。
全ブラウザとか言ってますが、以下でしか動作確認してないので注意。スマホとかOperaは知りません。

  • IE11
  • Edge
  • GoogleChrome
  • FireFox
  • Safali
0
0
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
0
0