日本語のファイル名でダウンロードさせる

ちょっと日本語のファイルをダウンロードさせる必要があっていろいろ調べてみた。
が、RFC2231に従えだの、IEは独自路線突っ走ってるだの書いてあって
かなりややこしそうだった。

結局どうすればいいんだということで、試した結果をまとめてみた。

とりあえず以下のページを参考にしながら検証ページを作成。

日本語ファイル名
添付ファイルにおける日本語のファイル名に関して

作成したページはこちら
ダウンロードさせるファイル名は「日本語'ファイル.txt」
ファイルにはContent-Dispositionが書き出されます。

このURLにマルチバイト文字を入れてる理由は、
ブラウザごとにURLのマルチバイト文字のエンコーディングが
違うみたいだからそれを調べるために入れてます。

ブラウザの判定にはBrowser Detection with PHP
使用しています。

Content-Dispositionのfilenameで指定しているのは、
生のShift_JIS、生のUTF-8、RFC2231の通りにエンコードしたもの、
何も指定しないの4通り。
生のShift_JIS、UTF-8についてはファイル名を"で囲み、
RFC2231の方は囲んでいない。

それと attribute に"*"を付けない(regular-parameter)場合、
付けた(extended-parameter)場合についても試してみた。
この2つはどう違うかというと、regular-parameterはfilename=ファイル名なのに対し、
extended-parameterはfilename*=ファイル名となる。

もっとも、非ASCII文字を取り扱うわけだから
extended-parameterにしないといけないんだけど。


で、手元にあるブラウザで試した結果が以下の通り。
「OK」は望むファイル名を指定できた、
「NG」は文字化けはしなかったが、URLのファイル名が使用されたことを表している。

OSブラウザバージョンURLのエンコーディングregular-parameterextended-parameter
生Shift_JIS生UTF-8RFC2231PATH_INFO生Shift_JIS生UTF-8RFC2231PATH_INFO
windowsMSIE6.0UTF-8 OK文字化け謎のファイル名OK NGNGNGOK
Firefox1.5.0.5(*1 OKOKエンコードされたままURLエンコーディングされたもの NG(URLエンコーディングされたもの)ファイル.txtOKURLエンコーディングされたもの
Opera9.01UTF-8 NGOKエンコードされたままOK NGNGOKOK
1:アクセス元のエンコーディングと同じ

見事に共通の方法がない。
処理の手間を考えると、ブラウザごとに生Shift_JISと生UTF-8を切り替えるのが楽かもしれない。
IEがRFC2231に準拠してくれれば何も考えなくていいし、しかもRFCに従えるというオマケ付きなんだけど。

URLに日本語のファイル名を入れてアクセスさせる場合、Firefoxはエンコーディングが
アクセス元のエンコーディングに依存する点に注意する必要がある。

posted by oi at 2006年12月22日 21:14 | Comment(0) | TrackBack(0) | PHP
この記事へのコメント

この記事へのトラックバック
×

この広告は1年以上新しい記事の投稿がないブログに表示されております。