* 提出 (Web Forms) [1] [[フォーム]]を[DFN[[RUBYB[提出] [submit]]]]すると、 [[成功]]制御子の[[制御子名]]と[[現在値]]の組が[[フォーム処理エージェント]]に渡されます。 [SRC[HTML 4 17.2, 17.13]] [2] 仕様書: - [[HTML 4]] ([[Web Forms 1.0]]) -- [CITE[17.13 Form submission]] [[#comment]] ** 提出処理の流れ [4] フォームの提出は、次の手順を経ます。 [SRC[HTML 4 17.13.3]] :1. 成功制御子の識別:[[フォーム]]内の制御子から、[[成功]]しているものを選びます。 :2. フォーム・データ集合の構築:成功制御子から、[DFN[[[フォーム・データ集合]]]] ([[制御子名]]と[[現在値]]の組の集合) を構築します。 :3. フォーム・データ集合の符号化:フォーム・データ集合を指定された[[媒体型]] ([CODE(HTMLa)[[[enctype]]]]) により符号化します。 :4. 符号化フォーム・データ集合の提出:符号化したデータ集合を指定された[[フォーム処理エージェント]] ([CODE(HTMLa)[[[action]]]]) に指定された方法 ([CODE(HTMLa)[[[method]]]]) で送信します。 :(5. 結果のレンダリング):UA は、提出の際の HTTP [CODE(HTTP)[[[GET]]]]・[CODE(HTTP)[[[POST]]]] に対する応答をレンダリングするべきです。 [5] >>4 で、提出されるのがフォーム・データ集合 (名前と現在値の組の集合) だけのように書かれていますが、 ファイル選択制御子の場合はそれに含まれないはずのファイルの内容も提出されます。 画像提出ボタン ([[[CODE(HTMLe)[input]]//[CODE(HTML)[image]]]]) の座標との関係も不明確で、概念の整理が不十分という印象を受けます。 [6] なお、 >>4 の流れは、4つの段階を完全に別のものとして扱えるわけではなく、 制御子の種類, 媒体型, 処理エージェントのプロトコルなどの依存関係があります。 仕様や実装によって実際に使用できる組合せは限られてきます。 >>7 をご覧ください。 [9] 文章入力制御子の入力長制御を完全に行えないなど、環境の事情によっては提出の際に [CODE(HTMLa)[[[maxlength]]]] 属性に基づく検査が必要かもしれません。 (UA の実装方法によっては、[[初期値]]が [CODE(HTMLa)[maxlength]] を満たさない場合やスクリプトによる変更があった場合にも注意が必要です。) ([[名無しさん]]) [[#comment]] ** 提出方法 [7] HTML 4 が[Q[確立された慣習]]として対応することを要求している [SRC[HTML 4 17.13.3, 17.13.4]] のは、次の場合だけです。 ,[CODE(HTMLa)[action]] ,[CODE(HTMLa)[method]] ,[CODE(HTMLa)[enctype]] ,その他 ,[[HTTP]] URI ,[CODE(HTML)[[[get]]]] ,[CODE(MIME)[[[application/x-www-form-urlencoded]]]] ,フォーム・データは ASCII 文字のみ ,HTTP URI ,[CODE(HTML)[[[post]]]] ,[CODE(MIME)[[[application/x-www-form-urlencoded]]]] ,フォーム・データは ASCII 文字のみ ,HTTP URI ,[CODE(HTML)[[[post]]]] ,[CODE(MIME)[[[multipart/form-data]]]] これも含めて、様々な組合せが利用されています。 使用例のある URI scheme: - [CODE(URI)[[[http]]:]] (HTTP) - [CODE(URI)[[[https]]:]] (HTTP over [[TLS]]) - [CODE(URI)[[[file]]:]] (ファイル) - [CODE(URI)[[[mailto]]:]] (電子メイル) - [CODE(URI)[[[data]]:]] (データ) - [CODE(URI)[[[ftp]]:]] ([[FTP]]) - [CODE(URI)[[[sms]]:]] ([[SMS]]) - [CODE(URI)[[[smsto]]:]] ([[SMS]]) - [CODE(URI)[[[javascript]]:]] ([[ECMAScript]]) - [CODE(URI)[[[device]]:]] (装置) 使用例のある媒体型: - [CODE(MIME)[[[application/x-www-form-urlencoded]]]] - [CODE(MIME)[[[application/sgml-form-urlencoded]]]] - [CODE(MIME)[[[application/x-www-form+xml]]]] - [CODE(MIME)[[[text/plain]]]] - [CODE(MIME)[[[multipart/form-data]]]] - [CODE(MIME)[[[application/vnd.wap.multipart.form-data]]]] [[#comment]] ** 実装 [8] [WEAK[2003-10-12 12:52:32 +00:00]] ''[[名無しさん]]'': 手元の [Q[Mozilla/5.0 (Windows; U; Windows NT 5.1; ja-JP; rv:1.4) Gecko/20030624]] で試してみたら、 [CODE(HTMLa)[[[enctype]]]] は [CODE(MIME)[[[application/x-www-form-urlencoded]]]] と [CODE(MIME)[[[text/plain]]]] と [CODE(MIME)[[[multipart/form-data]]]] に対応していましたが、[[引数]]をつけたら全滅でした。 [2] >>1 [[WinIE 6]] と Win[[Opera]] 7.20 でも同様でした。但し Opera は [CODE(MIME)[text/plain]] に対応していない模様。 [[#comment]] ** メモ [3] フォームの[Q[提出]] ([Q[submit]]) は、意味を解して[Q[送信]]とも呼ばれます。 しかしながら、提出と送信ではニュアンスが異なりますから、 専門用語としては使い分けるべきでしょう。 [[#comment]] * メモ