form要素はフォーム全体を定義するブロック要素です。form要素だけでは、データを入力したり受け取ることもできません。form要素の間にテキスト入力欄や選択欄などのコントロール(フォームを構成するオブジェクトのこと)を指定し、入力されたデータの送信先を action属性で指定します。
データの送信先には、主にプログラムの URI が指定されます。そして、入力されたデータを送信するとウェブサーバーを通して、データはそのプログラムへと渡されます。このようなウェブサーバーとプログラムの間のやり取りの手順を CGI と呼び、この手順によって実行されるプログラムを CGIプログラムと呼びます。CGIプログラムは Perl や PHP で作成されることが多く、他にも C や JAVA 等どのようなプログラミング言語を使っても作成することができます。たとえば、アンケートやメールフォーム、電子掲示板(BBS)などウェブ上には様々な CGIプログラムがあります。
HTML4.01 strict, XHTML1.0 strict, XHTML1.1 ではインライン要素やテキストを form要素の直下に置くことはできません。必ず p要素や div要素などのブロック要素(form要素自体を除く)を内容にしなければなりません。strict 以外では直接インライン要素やテキストも内包できます。視覚環境の UA では表示域の左右いっぱいまでの範囲を占め、前後に改行を置き、上下に1行分の余白をあけた表示になります。
input要素の type属性に "file" が指定されている場合、ウェブサーバーが受け取ることのできる MIMEタイプを限定するように UA に働きかけます。たとえば、CGIプログラムで画像ファイルのみをアップロードできるように取り扱いたい場合は、次のように記述します。
<form action="upload.cgi" method="post" accept="image/gif,image/jpeg,image/png"> ...... <input name="imgfile" type="file">
これは、"image/gif", "image/jpeg", "image/png" の MIMEタイプのファイルを受け入れ、それ以外のファイルがアップロードに指定された場合に、警告用のダイアログを出すように UA に働きかけることが期待されます。しかし、現在 accept属性に対応している UA はありません。
データの送信先が受け入れるデータの符号化(エンコード)に用いる文字コードを指定します。複数指定することも可能で、半角スペース、またはカンマ(,)で区切って指定します(accept-charset="euc-jp utf-8")。Windows版Internet Explorer は accept-charset属性に対応していません。
入力されたデータの送信先を指定します。送信先には主に CGIプログラムの URI が用いられています。なお、「action="mailto:xxx@xxx.xxx"」の記述を用いれば、指定のメールアドレスにデータを直接送信することもできまずが、HTTP(ウェブサーバと UA がデータを送受信する際に使われている通信手順)を用いない場合のデータ送信について、仕様は undefined と定義しているため、UA に依っては対応していない場合もあります。このためフォームの練習程度に用いるのは良いでしょうが、実用的ではないためデータをメールで受け取りたい場合は、CGIプログラムを用いたメールフォームを用意すようにしましょう。
method属性に "post" が指定されている場合に送信するデータの MIMEタイプを指定します。フォームに入力されたデータを送出する際に、これをウェブサーバが正しく解釈できるようにするためのデータ形式の設定です。enctype属性の指定がない場合は、"application/x-www-form-urlencoded" が初期値です。CGIプログラムでファイルのアップロードを可能にする場合は、必ず "multipart/form-data" を設定する必要があります。
%)と英数字で構成される URLエンコード形式(URI に用いられる文字列)で送信enctype属性の指定がない場合は "application/x-www-form-urlencoded" が初期値となるinput要素の type属性 に "file" が指定されている場合に、ファイルのアップロードを可能にするデータを送信する際の HTTP(ウェブサーバと UA がデータを送受信する際に使われている通信手順)のリクエストに使うメソッド(方法)を指定します。method属性にしていできる値には次の2種類があります。
action属性で指定された URI にデータが付加されて送信(初期値)"get" は送信するデータ量が小さい場合に、"post" は送信するデータ量が大きい場合とで使い分けると良いでしょう。
フォームに名前を付け、スクリプト(JavaScript など)から参照できるようにします。name属性の値は半角アルファベットの大文字・小文字が区別されません(case-insensitive)。XHTML1.0 strict と XHTML1.1 では name属性は廃止されたため、代わりに id属性 を使わなければいけません。それ以外のバージョンでは id属性の値を参照できない UA の後方互換のために name属性と id属性の両方に同じ値を設定することが認められています。
データの送信後にその応答を表示するページの表示方法を指定します。値には4つのキーワードと任意のフレーム名(frame要素に指定された name属性の値)を指定することができます。
HTML4.01 Strict, XHTML1.0 Strict, XHTML1.1 では target属性は廃止されたため指定できません。