php(CakePHP)でCSVのダウンロード機能を付けた。
が、IE11などで日本語で付けたファイル名が文字化けしてしまう。
原因は、IEとWindowsのせい。
Windowsは基本的にSJISで動いている。ほかのブラウザの場合自動で変換してくれるが、IEはやってくれない。
実は、ファイル名の文字コードを指定する方法がRFC 2231で規定されている。
header('Content-Disposition: attachment; filename*=UTF-8\'\'' . rawurlencode($filename));
”新しいブラウザ”であればこの方法で問題なく対応できる。
古いブラウザも対応するということであれば、ブラウザを判別してSJISに変換して出す必要がありそうだ。