[51] [[フォーム]]の[[コントロール][フォームコントロール]]は、
[DFN[名前]]を持つことができます。

[52] [[コントロール名]]は、[CODE[name]] [[内容属性]]により指定できます。

* 仕様書

[REFS[
- [36] [CITE@en[RFC 7578 - Returning Values from Forms: multipart/form-data]] ([TIME[2015-07-19 23:17:07 +09:00]] 版) <https://tools.ietf.org/html/rfc7578#section-3>
- [40] [CITE@en[RFC 7578 - Returning Values from Forms: multipart/form-data]] ([TIME[2015-07-19 23:17:07 +09:00]] 版) <https://tools.ietf.org/html/rfc7578#section-5.1>
]REFS]

* 制御子名

[37] [[非ASCII文字]]を使わないようにすると [CODE(MIME)@en[[[multipart/form-data]]]]
の[[相互運用性]]の問題を回避できるかもしれません [SRC[>>36]]。
[[非ASCII文字]]を[[制御子名]]に使うのは避ける[['''べきです''']] [SRC[>>40]]。
避けがたいときは、 [[UTF-8]] を使う[['''べきです''']] [SRC[>>40]]。

[47] と [[RFC 7578]] は主張していますが、旧 [[RFC]] だけが現実離れした規定をしていたのであり、
実際の [[Webブラウザー]]の動作は一致しているのですから、意味のない[[推奨]]に見えます。
無視して構わないでしょう。

[38] [[制御子名]]を[[フォーム]]内で[[固有]]にするのも良いかもしれません [SRC[>>36]]。

;; [39] 何がどう有用なのかよくわかりませんが...

* フォーム制御子名系 name 属性

[20] [[HTML]] の[[フォーム]]の[[制御子]]の名前は、
[DFN[[CODE(HTMLa)[name]] 属性]]で指定します。

該当する要素型:
[CODE(HTMLe)[[[input]]]] 要素型 (HTML, XHTML 1),
[CODE(HTMLe)[[[button]]]] 要素型 (HTML, XHTML 1),
[CODE(HTMLe)[[[select]]]] 要素型 (HTML, XHTML 1),
[CODE(HTMLe)[[[textarea]]]] 要素型 (HTML, XHTML 1),
[CODE(HTMLe)[[[object]]]] 要素型 (HTML, XHTML 1)

[21] 仕様書:
- [[HTML 4]] ([[Web Forms 1.0]])
-- [CODE(HTMLe)[input]] 要素 [CODE(HTMLa)[name]] 属性
<IW:HTML4:"interact/forms.html#adef-name-INPUT">
-- [CODE(HTMLe)[button]] 要素 [CODE(HTMLa)[name]] 属性
<IW:HTML4:"interact/forms.html#adef-name-BUTTON">
-- [CODE(HTMLe)[select]] 要素 [CODE(HTMLa)[name]] 属性
<IW:HTML4:"interact/forms.html#adef-name-SELECT">
-- [CODE(HTMLe)[textarea]] 要素 [CODE(HTMLa)[name]] 属性
<IW:HTML4:"interact/forms.html#adef-name-TEXTAREA">
-- [CODE(HTMLe)[object]] 要素の定義では
[CODE(HTMLe)[input]] 要素の [CODE(HTMLa)[name]]
属性が参照されています。
- [[Web Forms 2.0]]
-- [CSECTION@en[2.5. Extensions to existing attributes]]
<IW:WF2:"#extensions0">

* Content-Disposition: 欄 name 引数 (MIME/HTTP)

[22] [[HTML]] の [CODE(HTMLe)[[[form]]]] 
要素からデータが送信された時に control の
[CODE(HTMLa)[[[name]]]] 属性の値が指定されるのが
[CODE(MIME)[[[Content-Disposition]]]] 欄の
[DFN[[CODE(MIME)[name]] 引数]]です。 
[CODE(MIME)[[[form-data]]]] 配置型と共に使います。

[28] 詳しくは [CODE(MIME)@en[[[multipart/form-data]]]] の項を参照してください。

** 構文

[45] 値は、[[引用文字列]]として指定します。任意の[[文字列]]が指定できます。

[FIG(railroad)[
= [[引用文字列]]
]FIG]

[46] [[字句]]でも良いのかどうかは不明です。

[44] 主要ブラウザはどれも [[quoted-string]] を使いますが、
[CODE(char)[[[\]]]] や [CODE(char)[[["]]]] をきちんと [[quoted-pair]] にするのは
[[Opera]] だけです。他のブラウザはそのまま放置します。
[[Opera]] も含めてどのブラウザも、 [CODE(HTMLa)@en[[[name]]]] に [CODE(charname)@en[[[LF]]]]
が含まれているとそのまま出力します。なので、 [[頭欄]]としては壊れてしまいます。
[SRC@en[>>66]]

[48] [[文字コード]]は、[[フォームの提出]]に使うものとできます [SRC[>>40]]。

[43] 主要ブラウザでは、通常の[[制御子]]の[[本体]]に使われるのと同じ [[charset]]
でそのまま[[符号化]]されるようです。表現できない[[文字]]が[[十進数文字参照]]になるのも[[本体]]と同じです。
([[HTTP]] で[[提出]]する場合のみ調べています。) 
[SRC@en[[[Firefox]] 3.0.4、[[Opera]] 9.61、[[Safari]] 3.2、[[WinIE 7]]]]

[24] 現実の実装は、多くが、[[実体本体]]と同じ [[charset]]
で生で符号化するようです。
一部実装では [CODE(HTML)[[[_charset_]]]] hack が使えます。

;; [23] [[HTML 4]] は[[非ASCII文字]]が含まれる場合、 [[RFC 2045]]
の方法で[[符号化]]してよいとしていました [SRC[HTML 4 17.13.4.2 <http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4>]]。
[[RFC 2045]] にそのような方法の規定はなく、何を認めていたのか謎でした。

;; [42] [[RFC 2388]] は [[RFC 2047]] の方法で[[符号化]]するよう求めていました
[SRC[RFC 2388 3., 5.4]]。 [[RFC 2047]] [CODE(ABNF)@en[[[encoded-word]]]]
を使うことを求めていたと推測されますが、 [[RFC 2047]] は [CODE(ABNF)@en[[[quoted-string]]]]
での利用を禁止しており、 [[RFC 2388]] がそれでも [CODE(ABNF)@en[[[encoded-word]]]]
を使うことを特に認めていたのかどうか、解釈は明確ではありませんでした。
[[RFC 2388]] の改訂である [[RFC 7578]] は、 [[RFC 2047]]
の方法は広くは採用されなかったようだ [SRC[>>40]] と述べており、
事実上これを撤回しています。

[EG[
[41] 
例 [SRC[HTML 4 17.13.4.2]]
[PRE(MIME)[
Content-Disposition: form-data; name="mycontrol"
]PRE]

この例では、制御子名 [SAMP[mycontrol]] を表します。
この欄を含む本体部分の[[本体]]は、この名前の制御子の[[現在値]]
(またはファイル内容) になります。
]EG]

* 制御子名

[1] [[HTML]] の[[フォーム]]では、[[制御子]]は[DFN[[[名前]]]]を持つことができます。

[17]
:状態:[[W3C]] [[勧告]]、[[WHATWG]] [[WD]]
:[[要素型名]]:
[CODE(HTMLe)@en[[QN[[[input]]] [http://www.w3.org/1999/xhtml]]]],
[CODE(HTMLe)@en[[QN[[[button]]] [http://www.w3.org/1999/xhtml]]]],
[CODE(HTMLe)@en[[QN[[[select]]] [http://www.w3.org/1999/xhtml]]]],
[CODE(HTMLe)@en[[QN[[[textarea]]] [http://www.w3.org/1999/xhtml]]]],
[CODE(HTMLe)@en[[QN[[[object]]] [http://www.w3.org/1999/xhtml]]]]
:[[属性名]]:[CODE(HTMLa)@en[[[name]]]]
([Q@en[name]] ([Q[名前]]) より)
:[[属性値]]:自由 (>>3)
:[[既定値]]:名前なし (>>11)

[2] 仕様書:
- [[HTML 4]]
-- 17.2 Controls <IW:HTML4:"interact/forms.html#control-name">
-- [CODE(HTMLe)[input]] 要素 [CODE(HTMLa)[name]] 属性
<IW:HTML4:"interact/forms.html#adef-name-INPUT">
-- [CODE(HTMLe)[button]] 要素 [CODE(HTMLa)[name]] 属性
<IW:HTML4:"interact/forms.html#adef-name-BUTTON">
-- [CODE(HTMLe)[select]] 要素 [CODE(HTMLa)[name]] 属性
<IW:HTML4:"interact/forms.html#adef-name-SELECT">
-- [CODE(HTMLe)[textarea]] 要素 [CODE(HTMLa)[name]] 属性
<IW:HTML4:"interact/forms.html#adef-name-TEXTAREA">
-- [CITE[17.13.2 Successful controls]]
<IW:HTML4:"interact/forms.html#successful-controls">
- [[RFC 3106]]
<urn:ietf:rfc:3106>
- [[Web Forms 2.0]]
-- [CSECTION@en[2.5. Extensions to existing attributes]]
<IW:WF2:"#extensions0">


** 制御子名の指定

[10] 制御子名は、その制御子を定義する [CODE(HTMLa)[[[name]]]] 
属性で指定します。メニュー制御子では、 [CODE(HTMLe)[[[select]]]]
要素の [CODE(HTMLa)[name]] 属性で指定します [SRC[HTML 4 17.13.2]]。

[11] 一般に [CODE(HTMLa)[name]] 属性は省略可能です。
制御子名を持たない制御子は、[[成功]]の対象になりません。
[SRC[HTML 4 17.13.2]]。

[14]
HTML 4 DTD の[[注釈]] (参考) には、
[Q[attribute name required for all but submit and reset]]
([CODE(HTML)[submit]] と [CODE(HTML)[[reset]] 
以外では [CODE(HTMLa)[name]] 属性は必須)
と書かれています。

[15]
>>14 同じく、 [Q[submit as part of form]]
とも説明があります。

[[#comment]]


** 制御子名に使える文字

[3] HTML 4 仕様書では制御子名に使える文字は特に規定されていません。
HTML 的には何でもありということでしょうか。

但し、大文字と小文字は区別されません [SRC[HTML 4 17.4, 17.5, 17.6]]。

[[#comment]]

** 制御子名の名前空間

[4] 制御子名の適用範囲は、その制御子が属する [CODE(HTMLe)[[[form]]]]
要素内です [SRC[HTML 4 17.2]]。

普通制御子名は制御子ごとに異なる名前としますが、 [CODE(HTML)[[[checkbox]]]]
制御子などのように複数個の制御子に同じ名前を使えるものもあります。

[16]

@@ [CODE(HTML)@en[[[checkbox]]]], [CODE(HTML)@en[[[radio]]]]以外での重複は?
異なる種類間での重複は?

[[#comment]]

** 特殊な制御子名

[5] 正式な HTML 仕様にはありませんが、各種の実装では制御子名に特別な意味を持たせていることがあります。

[6] [CODE(XPath)[[CODE(HTML)[[[input]]]][@[CODE(HTML)[[[type]]]]='[CODE(HTML)[[[submit]]]]'] ]]
な要素の [CODE(HTMLa)[name]] 属性の値を [CODE(HTML)[navi_pos]] とすると、
[[iモード]]端末では位置情報を form の他の内容とともに送信します。 

''DoCoMo Net - 製品・サービス - i-mode'' <http://www.nttdocomo.co.jp/p_s/corporations/dlp/tag/index.html>

[7] 
[SAMP(URI)[http://www.example.com/gps/serch.cgi?pos=N35.39.41.61E139.44.49.42&geo=wgs84&X-acc=3&param=a]] 
([CODE(HTML)[[CODE(HTMLa)[[[method]]]]=[[get]]]] の場合) のようになるそうです。
この挙動は [[HTML 4]] などの form submit 
処理手順に反する重大な非互換変更です。

[9] [[WinIE]], [[Mozilla]], [[Opera]] をはじめとする多くの近代的 UA
は、 [CODE(HTML)[[[_charset_]]]] hack を実装しています。
これは、制御子名を [CODE(HTML)[_charset_]] として [CODE(HTMLa)[[[value]]]]
属性を省略した隠し制御子 ([CODE(HTML)[[[hidden]]]]) を作成すると、
フォーム提出時に使用した [[charset]] 名を報告させられるというものです。

[17]
[[RFC 3106]] は、
[CODE(HTML)@en[[[Ecom_]]]] で始まる幾つかの[[名前]]を[[予約]]しています。
[[著者]]は、 [CODE(HTML)@en[[[Ecom_]]]]
で始まる[[名前]]を [[RFC 3106]]
と矛盾した方法で使用[['''してはなりません''']]。
[SRC@en[WF2 2.5]]

[[#comment]]


* メモ

[12]
[CODE(HTMLe)[[[object]]]] 要素の定義では
[CODE(HTMLe)[[[input]]]] 要素の
[CODE(HTMLa)[[[name]]]] 属性の定義が参照されています
[SRC[HTML 4]]。

([[名無しさん]] [sage])

[13]
HTML 4 DTD の [CODE(HTMLe)[[[object]]]]
要素の宣言の[[注釈]] (参考) では
[Q[submit as part of form]]
と書かれています。

([[名無しさん]] [sage])

[18]
[[XHTML 1.0]] では[[素片識別子]]や[[閲覧文脈名]]として用いられる
[CODE(HTMLa)@en[[[name]]]] [[属性]]が[[非推奨]]とされているのですが、
[CODE(HTMLe)@en[[[object]]]] [[要素]]の [CODE(HTMLa)@en[[[name]]]]
[[属性]]はそれに含まれて''いません''。

;; 
<IW:XHTML1:"#h-4.10">

([[名無しさん]])

[19]
[[HTML 4.0]]、[[HTML 4.01]]、[[XHTML 1.0]] のいずれの[[厳密DTD]]、
[[移行用DTD]]、[[フレーム集合DTD]]のいずれでも、
[CODE(HTMLe)@en[[[object]]]] [[要素]]の [CODE(HTMLa)@en[[[name]]]] [[属性]]は定義されています。
また、 [[XHTML m12n]] の[[物体]][[モジュール]]でも定義されています。
いずれも[[非推奨]]では''ありません''。

([[名無しさん]])

* [CODE(XMLe)@en[name]] 要素 (RSS2)

[25] [[RSS 2.0]] の [DFN[[CODE(XMLe)@en[[[name]]]] [[要素]]]]は、
[[テキスト入力欄]]の[[テキスト]]の[[名前]]を表します。

:[[要素名]]:[CODE(XMLe)@en[[[name]]]] ([[name]] ([[名前]]) より)
:文脈:[CODE(XMLe)@en[[[textInput]]]] [[要素]]の[[子要素]]として
:[[内容モデル]]:[CODE(ABNF)[[[ALPHA]] *([[ALPHA]] / [[DIGIT]] / ":" / "-" / "." / "_")]]
:[[属性]]:

** 仕様書

-[29] [CITE@en[RSS 2.0 Specification (version 2.0.10)]] ([TIME[2008-11-21 18:10:17 +09:00]] 版) <http://www.rssboard.org/rss-specification#lttextinputgtSubelementOfLtchannelgt>
-[30] [CITE@en[RSS Best Practices Profile]] ([TIME[2008-11-21 15:11:45 +09:00]] 版) <http://www.rssboard.org/rss-profile#element-channel-textinput-name>

** 内容

[26] [[RSS Best Practices]] によれば、値は
[CODE(ABNF)[[[ALPHA]] *([[ALPHA]] / [[DIGIT]] / ":" / "-" / "." / "_")]]
でなければ[['''なりません''']]。

** 文脈

[27] [CODE(XMLe)@en[[[name]]]] [[要素]]は [CODE(XMLe)@en[[[textInput]]]]
[[要素]]の[[子要素]]として用いることができます。
この[[要素]]は必須です [SRC@en[[[RSS 2.0]]]]。

* [CODE(XMLe)@en[name]] 要素 (RSS1)

[31] [[RSS 1.0]] の
[DFN[[CODE(XMLe)@en[[[name]]]] [[要素]]]]は、入力欄の(変数)名を表します [SRC[>>32]]。 

** 仕様書

- [32] [CITE[RDF Site Summary (RSS) 1.0]] ([TIME[2008-06-10 05:47:42 +09:00]] 版) <http://web.resource.org/rss/1.0/spec#s5.6.3>

** 文脈

[33] [CODE(XMLe)@en[[[textinput]]]] [[要素]]の[[子要素]]としてちょうど1個必要です [SRC[>>32]]。

** 内容

[34] [[内容]]は [CODE(XML)@en[[[PCDATA]]]] です [SRC[>>32]]。 

[35] 500文字以下とすることが[RUBYB[提案]@en[suggested]]されています [SRC[>>32]]。

* 歴史

[8] [[ECML]]

[49] [CITE@en[Remove "compatibility caseless" matching]]
([[domenic]]著, [TIME[2016-10-21 04:41:46 +09:00]])
<https://github.com/whatwg/html/commit/6acdb2122298d2bb7bb839c0a61b4e1f9b0f9bc9>

[FIG(quote)[
[FIGCAPTION[
[50] [CITE@en[Micropub]]
([TIME[2017-05-21 23:18:57 +09:00]])
<https://micropub.net/draft/#form-encoded-and-multipart-requests-p-1>
]FIGCAPTION]

> For x-www-form-urlencoded and multipart/form-data requests, Micropub supports an extension of the standard URL encoding that includes explicit indicators of multi-valued properties. Specifically, this means in order to send multiple values for a given property, you must append square brackets '''['''''']''' to the property name.

]FIG]


[53] [CITE@en[Add DOM clobbering note to the form controls section]]
([[GloverDonovan]]著, [TIME[2018-03-08 12:31:00 +09:00]])
<https://github.com/whatwg/html/commit/d661e874760bb1a4fc0634e6f01e5c02b8c8c1fe>

[54] [CITE@en[Add DOM clobbering note to form controls section by GloverDonovan · Pull Request #3484 · whatwg/html]]
([TIME[2018-03-09 12:56:27 +09:00]])
<https://github.com/whatwg/html/pull/3484>

[55] [CITE@en[Should “Naming form controls” section include a warning about names overriding form properties? · Issue #2720 · whatwg/html]]
([TIME[2018-03-09 12:57:33 +09:00]])
<https://github.com/whatwg/html/issues/2720>