#?SuikaWiki/0.9 page-icon="HTML"
* form 要素型 enctype 属性 (HTML, XHTML 1)
[3] [DFN[[CODE(HTMLa)[enctype]] 属性]]には、[CODE(HTMLa)[[[method]]]] 属性の値が [CODE(HTML)[[[post]]]] の際に使われる[[媒体型]]を指定します
(大文字・小文字を区別しない)。
()
[4] 媒体型の引数を含めても良いのかは不明です。
[[HTML4]] の規定は曖昧ですが、含めてはいけないような臭いが漂っています。 ([CODE(HTML)[%[[ContentType]]]] 参照。)
しかしながら、古い時代に引数も含めた用例は確認されています。
([SAMP[enctype="text/plain;charset=iso-2022-jp"]]。
[WEAK[この場合、 HTML 4 的には [CODE(HTMLa)[[[accept-charset]]]] 属性を使用します。]])
[5] >>4 HTML4 は大文字・小文字を区別しないとしているが、パラメーター値の区別は定義依存だから、
HTML4 ではやっぱりパラメーターは含まれないのかも。
* go 要素 enctype 属性 (WML)
[16] [[WML]] の [CODE(WMLe)[[[go]]]] 要素でも、 HTML の
[CODE(HTMLe)[form]] 要素の場合と同じような意味を持つ [CODE(WMLa)[enctype]]
属性が定義されています。
既定値も同じです。
( 9.5.1 参照。)
非 US-ASCII 値を含む場合には [CODE(MIME)[multipart/form-data]]
を使うことが推奨 (recommend) されています。
[[#comment]]
*実装または用例が確認されている媒体型
** application/x-www-form-urlencoded
[8] 媒体型 [DFN[[CODE(MIME)[[[application/x-www-form-urlencoded]]]]]]
は [CODE(HTMLa)[enctype]] 属性の既定値です。
伝統的に [CODE(HTMLe)[form]] 要素を埋めて提出する際に使用されてきた形式であり、
古い [ABBR[[[UA]]] [[[利用者エージェント]]]] はこの形式にしか対応していません。
HTML 4 はこの形式を実装することを UA に要求しています。 (17.13.4 参照。)
[[CGIスクリプト]]などのサーバー側の処理系は、ほとんどがこの媒体型にのみ対応しています。
[WEAK[ひどいことに、何が送られて来ようがこの媒体型とみなしてしまう実装がかなり多い。]]
[9] 規格上は [[US-ASCII]] しか送れないとか色々あります。詳しくは
[CODE(WikiPage)[[[application/x-www-form-urlencoded]]]] を参照。
[[#comment]]
** multipart/form-data
[11] ファイルの[[うp]]機能のために広く実装されることとなったのが
[DFN[[CODE(MIME)[[[multipart/form-data]]]]]] です。 [[MIME]]
の[[多部分]]機構を使っているので、 (仕様上は) MIME
で扱うことができるあらゆる種類のデータを表現できます。
この形式の使用は、 US-ASCII しか安全に送れないという
[CODE(MIME)[application/x-www-form-urlencoded]] の問題に対する解答に (仕様上は)
なっています。
[10] HTML 4 は [[UA]] にこの形式の実装を要求しています (17.13.4 参照。)
実際現代のほとんどの [[WWWブラウザ]]はこの形式を実装しています。
一方、 CGI スクリプトなどのサーバー側は酷い状況です。 >>8 にあるように、
多くの実装は相手にもしていません。 [[Perl]] なら [[CGI.pm]]
などを使えば自動的に対応できますが、[WEAK[最近は増えてきたとはいえ]]モジュールを
CGI スクリプトで使うことは少なく、 [CODE(MIME)[application/x-www-form-urlencoded]]
にしか対応していません。ファイルのうpがしたくなったら
(素直にモジュールを使えばいいのに) 見よう見まねで適当に対処しようとして、
結局特定ブラウザの特定の版でしか上手く動かないようなコードを書いてみたり。
[WEAK[(で、質問掲示板で暴れてみたり。)]] お前らちゃんと仕様書読んでくださいよ。
処理系で標準または標準に近いモジュール的なものが[[要求]]の解析をしてくれることが広く知られていて、
そのモジュール的なものの作者がちゃんと仕様を読んでコードを書くような人なら、
その処理系で書かれた処理はさほど深く考えなくても自動的に
[CODE(MIME)[multipart/form-data]] を正しく処理できるはずです。
[WEAK[よく知りませんけど、 Java servelet とか PHP はその辺きちんとしてるのではないですか?]]
[6] [CODE(HTML)[[CODE(HTMLa)[[[tipe]]]]="[[file]]"]] の [CODE(HTMLe)[[[input]]]]
要素があるフォームでは、この値である必要があります。
( 参照。)
- [13] 1つの form[type=file] 要素を使って複数ファイルをうpする ([[multipart/mixed]] 使用。) のは、 [[UA]] で対応してるのはなさげ、サーバーもおそらく全滅だろうという感じですね。 [[www-html]] で [[Opera]] の特定の版では出来るという未確認情報がありますが、最新版では出来ないらしいし、勘違いかなんかじゃないかなあ。
- [15] WinIE 3.02 用の file upload add-on は1997年の中ごろに出ました。
[[#comment]]
** text/plain
[7] 幾つかの実装は、 [DFN[[CODE(MIME)[[[text/plain]]]]]] に対応しています。
主として、 [CODE(HTMLa)[[[action]]]] が [CODE(URI)[[[mailto]]:]] URI scheme
であるときに使われます。
古くは、 [SAMP(HTMLa)[[[text/plain]]; charset=iso-2022-jp]]
のように [CODE(MIME)[[[charset]]]] 引数をつけた値も使われていました。
[[#comment]]
** application/sgml-form-urlencoded
[12] [DFN[[CODE(MIME)[[[application/sgml-form-urlencoded]]]]]]
は、ほぼ [CODE(MIME)[application/x-www-form-urlencoded]]
と同じですが、 [CODE[&]] の代わりに [CODE[;]] を使います。
[[URI参照]]の一部 (特に [CODE(ABNF)[[[query]]]] 部) で [CODE(URI)[&]]
を使うことはよくありますが、 HTML 内に記述する場合は [CODE(HTML)[&[[amp]];]]
とする必要があるかもしれません。これを嫌って [CODE(URI)[;]]
を使うことをよしとする向きもあります。 (HTML 4 もこれを推奨しています。)
[CODE(HTTP)[[[POST]]]] で送られるときには URI と関係しないので無関係ではありますが、
一貫性のためにどちらも変えてしまうのがいいかもしれません。
というわけで登場するのがこの媒体型です。
[14] [[Lynx]] がこれを実装しています。
また、CGI スクリプトなどのサーバー側の実装でも新し目のものであれば、
[CODE(MIME)[application/x-www-form-urlencoded]] の処理で [CODE(URI)[&]]
と [CODE(URI)[;]] を同一視することで[WEAK[意図するしないはともかく]]対応していることもあります。
[[#comment]]
** application/vnd.wap.multipart.form-data
[17] [CODE(MIME)[multipart/form-data]] のバイナリ表現として、 [[WAP]] で
[DFN[[CODE(MIME)[[[application/vnd.wap.multipart.form-data]]]]]]
が定義されています。
WML (
9.5.1) は、 [CODE(WMLe)[go]] 要素の [CODE(WMLa)[enctype]] 属性が
''[CODE(MIME)[multipart/form-data]]'' のときに、 UA
が [CODE(MIME)[application/vnd.wap.multipart.form-data]]
で送ることを推奨 (recommend) しています。
([[WSP]] でバイナリ表現で送っても、 [[HTTP]] の世界との関門
([[WAP串]]) で標準のテキスト表現に変換されます。から、 HTTP
世界では [CODE(MIME)[multipart/form-data]] で送られてきたように見えます。)
[[#comment]]
** その他
[[#comment]]
* メモ
- [1] [WEAK[2003-10-12 12:52:32 +00:00]] ''[[名無しさん]]'': 手元の Mozilla/5.0 (Windows; U; Windows NT 5.1; ja-JP; rv:1.4) Gecko/20030624 で試してみたら、 [CODE(MIME)[[[application/x-www-form-urlencoded]]]] と [CODE(MIME)[[[text/plain]]]] と [CODE(MIME)[[[multipart/form-data]]]] に対応していましたが、引数をつけたら全滅でした。
- [2] >>1 [[WinIE6]] と Win[[Opera]] 7.20 でも同様でした。但し Opera は [CODE(MIME)[text/plain]] に対応していない模様。