* filename 引数 (MIME/HTTP/SIP Content-Disposition: 欄) [9] その名のとおり、ファイルの名前を示すパラメーターです。 詳しくは [[RFC 2183]] を参照して下さい。 [44] fdsdfsdfs ([[asdfas]] [safdaf] [WEAK[2004-10-14 11:59:46 +00:00]]) [[#comment]] ** ファイル名の互換性問題 [10] [CODE(MIME)[filename]] パラメーターを巡っては幾つかの問題があります。 そのうちの1つは値の安全性についてです。 RFC 2183 にも記述がありますが、例えば [SAMP(file)[[[/etc/passwd]]]] というファイル名が指定されていたとしましょう。 [[UA]] がその名前でファイルを保存してしまって、しかもたまたま [[permission]] 的にもそれが成功してしまうと、 [[Un*x]] 系の処理系では困ったことになります。 (そのような permission にしてあるのも問題ですが...) ですから、この値は参考程度とするべきものであって、 自動処理でこの名前をそのまま使う時は、 細心の注意を払う必要があります。 [[#comment]] ** 非 ASCII 文字の値 [11] [CODE(MIME)[fuilename]] 引数のもう一つの問題は、 非 [[ASCII]] 文字を使った名前への対応です。 (特に最近では [[Windows]] だけでなく [[Un*x]] 系でも漢字のファイル名を使ったりする人が増えてきました。) 規格としては既に [[RFC 2231]] の方法 (>>3) が決まっていますが、この標準化が遅れたことと、 やや複雑であることから、好き勝手な方法で実装した [[MUA]] が幾つもあって、その MUA との互換性のため (あるいは実装者の無知のため) そうした方法での実装が後をたちません。 ですから、安全にファイル名をやり取りしたいと思ったら、 [[ASCII]] の英数字だけに限定する方が得策です。 しかし、一昔前ならともかく、 多言語・多文字が当たり前の現在ではこのような仕様は批判されても当然でしょう。 [12] ''[CODE(ABNF)[[[encoded-word]]]] を使う方法''。 [CODE(ABNF)[[[parameter]]]] の [CODE(ABNF)[[[value]]]] ([CODE(ABNF)[[[[[quoted-string]]]]) の中に ]] [CODE(ABNF)[encoded-word]] を使う方法です。 [SAMP(file)[filename="=?iso-2022-jp?b?...hogehoge...?="]] のようにします。 この方法は'''間違い'''です ([[RFC 2047]] にも [CODE(ABNF)[quoted-string]] 中で [CODE(ABNF)[encoded-word]] が使えないことは明記されています)。 [[M$OE]] をはじめとする数多くの UA がこの方法で実装していますので、 UA はこの方式も解読出来ると良いかもしれませんが、 この方法で送っては'''いけません'''。 [13] ''生8ビット符号を使う方法''。 生の日本語 [[EUC]] や[[シフトJIS]]をそのまま使って [SAMP(MIME)[filename="ファイル名"]] とする方法です。現在でもたまに使われますが、 この方法は[[相互通信性]]に欠けるので、使っては'''いけません'''。 (電子メイルの世界はいまだに8ビット安全ではありません。) [20] しかし実際には、特に [[HTTP]] で使用される場合において、 >>13 のようなことがありますね。大抵は、[[本体]]の [CODE(MIME)[[[charset]]]] と同じなんでしょうが... (その場合でも [CODE(HTTP)[[[Content-Type]]:]] 欄に [[[CODE(MIME)[charset]]パラメーター]]が無かったりするので、 油断は出来ません。結局は自動判別せざるを得ません。) もっとも、 HTTP では RFC 2231 の方法も [CODE(ABNF)[encoded-word]] もほとんど使われていないので、仕方が無いのは確かです。 また、 SIP は [[UTF-8]] を採用しているので、 ここで UTF-8 を使うことはまったく合法 (そして唯一の方法) です。 (なお、 [[HTTP/1.1]] においては頭部の8ビット文字列は [CODE(charset)[[[ISO-8859-1]]]] として解釈されます。 [[HTTP/1.0]] では実装依存の8ビット列です。) [40] [[URI符号化]]が有効な UA もあるらしい。 (なにかというと WinIE ね。) 追試きぼんぬ。 [[#comment]] ** 実装 [30] ''Content-Disposition'' : [[Windows]] の実装の状況 (1999)。 [36] ''414647 - [IE5] Content-Disposition: の DBCS ファイル名(5C)が認識できない'' ([[WinIE 4]], [[WinIE 5]]) HTTP で使われるときに、例えば[[シフトJIS]] で [SAMP(HTTP)[filename=表.xls]] とあったら、 保存時の既定名が [SAMP(file)[表.xls]] ではなくて URI の末尾の部分と同じになるという話。 [CODE(char)[0x5C]] を quote として落とすだけなら分かる (仕様上正しい動作) だけど、全く無視してしまうのはおかしい。(けど、 [SAMP[表]]の片割れが残って、 不正なファイル名→無視と判断しているのならまともかもしれない。) なんにせよ、この文書での M$ の立場は[Q[本来 [CODE(charset)[[[US-ASCII]]]] しか使えないけど、 [[DBCS]] もおまけで対応してるよん☆]]らしい。 M$ にしては珍しくまともなことを言ってるね。 [42] ''Bug 162765 - RFC2231 filename support for nsExternalAppHandler'' : Mozilla が RFC 2231 方式に対応したという話。 [43] Mozilla 1.2.1 Navigator で、「ファイル」->「ページを送信」してメイルに添付して送ろうとしますと、たとえばみてた URI が [SAMP(URI)[http://foo.example/path/to/resource]] であるなら、 [CODE(MIME)[filename]] 引数は [SAMP(file)[foo.example/path/to/resource]] になりました。 これってどう考えれば良いのだろう。 別に間違ったことをしているわけではないけど、あまり正しいようにも思えない。 ([[名無しさん]] [WEAK[2004-05-10 04:45:59 +00:00]]) [1] [[HTML]] [CODE(HTMLe)[[[form]]]] からのファイル[[うp]]の時の [CODE(MIME)[filename]] 引数の値、 [[WinIE6]] では[[完全経路]]名、 [[Mozilla]] 1.4 と [[Opera]] 7.20 では狭義のファイル名になりました。 (MIME 的には後者が適当。) [2] 引数の値の符号化は、 [CODE(MIME)[[[multipart/form-data]]]] の他の部分と同じになりました。 [3] >>1 WinNN 3.0 では完全経路名、 MacNN 3.0 では狭義ファイル名。 [[#comment]] * メモ