Content-Disposition
2006/04/05 22:23
とあるサイトのダウンロード処理を実装している。
この様な処理では、以下の様に Content-Disposition ヘッダを送信する。
Content-Disposition: attachment; filename="hogehoge.pdf"
ダウンロードを強制せずに、ダウンロード時のファイル名を予約するだけなら、 "attachment" のところを "inline" に変える。
とまぁ、ここまでは特別悩むこともない。言ってみれば基本だ。
問題は、ファイル名が日本語の場合。
RFC2183によれば、メールヘッダ同様、"B"エンコードするのが正しいらしい。だが、RFC通り解釈するUAはとても少ない。
FireFox: RFC通り。 ※Win/Mac共
InternetExplorer: ファイル名をShiftJISにエンコードする必要あり。 ※Win/Mac共
Safari: 色々試したが、とにかく文字化けする。
Opera: UTF-8にエンコードすると良いらしい。 ※手元にない為未確認
もう惨憺たる状況。なんと、FireFox以外全滅。
それでもまぁ、何かしらのエンコードで送信すれば文字化けしないのなら、まだいい。UAごとに異なるContent-Dispositionヘッダを送信することは、それほど難しいことじゃないから。
問題は、ぼくのメインブラウザでもあるSafari。色々試してみたが、文字化けしないエンコード方法が見つけられない。
解決のメドが立たないから、Safariに対してはRFC通り、"B"エンコードしたファイル名を送信することにした。
適切なファイル名はユーザーに入力してもらえばいいんだし、RFCを守ってないSafariが悪いんだし。(その意味では、FireFox以外のUAも全て同罪だけど)
良い方法が見つかったら対応しますんで、ということで。
