[12] かつて、[[フォーム提出]]で使用した[[文字コード]]を記述するために
[DFN[[CODE[_charset_]]]] という[[名前][制御子名]]の特別な[[フォーム制御子]]が使われていました。

* 代替

[13] 現在となっては常に [[UTF-8]] を用いるのが普通です。

[14] 今でも [[Webブラウザー]]は [CODE[_charset_]] に対応していますが、
敢えて使う必要はほとんど残っていませんし、[[ライブラリー]]などであっても対応していないことが少なくありません。

* 歴史

[1] [[IE]] には [CODE(HTML)[<[CODE(HTMLe)[[[input]]]] [CODE(HTMLa)[[[type]]]]="[[hidden]]" [CODE(HTMLa)[[[name]]]]="_charset_"/>]] を [CODE(HTMLe)[[[form]]]] 要素中に潜ませておくと [CODE(ABNF)[[[query]]]] や [CODE(MIME)[[[application/x-www-form-urlencoded]]]] に [CODE(URI)[_charset_=[VAR[charset 名]]]] を入れてくれるという機能があります。 ([[WinIE5]]+)

[2] ''Bug 18643 - add support for _charset_ field in form submissions [form sub]'' <http://bugzilla.mozilla.org/show_bug.cgi?id=18643> : [[Mozilla]] でも実装しようかどうしようか、という話題。
実装されたみたいです。

[3] この hack、 [[WinIE3]] とかの古いブラウザは黙って
[SAMP(URI)[_charset_=&other-param=value]]
にしてくれるから安心・・・と思いきや、
[[NC]] 4.01 で試してみたらなぜか
[SAMP(URI)[_charset_=++&other-param=value]]
になりました。
[WEAK[[CODE(HTMLa)[value]] なしの [CODE(HTML)[hidden]] form control はどんな [CODE(HTMLa)[name]] でもこうなります。]]

HTML の仕様上、この文脈で
[CODE(HTMLa)[value]]
は本来必須なのですから、それが欠けている場合にどうなろうと実装依存なのでしょうけど、
なんでわざわざ [SAMP(URI)[++]]
なんかを補うのか謎です。不具合でしょうかねぇ。

・・・という、未対応 UA
の挙動が確定しないという問題がありますから、
_charset_ hack の信頼は避けた方が無難です。

例えば、鯖内で動くスクリプトの文字コード変換ルーチンを通す時には、
あらかじめ _charset_ 値を確認して、
明らかに異常な場合は捨てないと、
誤動作する虞があるでしょう。

[4] [CITE@en-GB-x-Hixie[Web Forms 2.0]] ([TIME[2009-01-05 20:07:15 +09:00]] 版) <http://www.whatwg.org/specs/web-forms/current-work/#unacceptableCharacters>

[5] HTML5 に入ります <http://www.w3.org/TR/html5/forms.html#url-encoded-form-data>

[6] [CITE@en[HTML5 Revision Tracker]]
([TIME[2010-04-06 23:31:19 +09:00]] 版)
<http://html5.org/tools/web-apps-tracker?from=4976&to=4977>

[8] [[RFC 7578]] ([CODE(MIME)@en[[[multipart/form-data]]]]) も言及しています。

[7] [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>

[9] [CITE@en[Fix #32: use the encoding name exposed by DOM and HTML <form> · whatwg/encoding@18bf4fa]]
([TIME[2016-02-11 11:49:15 +09:00]] 版)
<https://github.com/whatwg/encoding/commit/18bf4fa6f005a899696800a8f6b0d20f3a4c1c0e>

[10] [CITE@en[Editorial: Clarify <input name=_charset_> behavior]]
([[sideshowbarker]]著, [TIME[2016-07-28 18:19:17 +09:00]])
<https://github.com/whatwg/html/commit/dca408ce9114c80a203dca571ff06aba4045ae47>

[11] [CITE@en[Clarify package data algorithm for FormData]]
([[eehakkin]]著, [TIME[2016-12-17 01:36:13 +09:00]])
<https://github.com/whatwg/fetch/commit/e03ee6fc7f6234005a058d9784e95861b9a0a301>

[15] [CITE@en[Parse application/x-www-form-urlencoded using UTF-8 only]]
([[annevk]]著, [TIME[2017-01-17 19:11:02 +09:00]])
<https://github.com/whatwg/url/commit/3fe969679f78c92c353047661b0c4b6797f099f6>

[16] [CITE@en[Remove _charset_ handling from application/x-www-form-urlencoded]]
([[tkent-google]]著, [TIME[2018-04-27 17:23:44 +09:00]])
<https://github.com/whatwg/url/commit/5c0d2ec09ec16099e5c453d088fea9b8ba0154a5>

[17] [CITE@en[Remove _charset_ handling. by tkent-google · Pull Request #382 · whatwg/url]]
([TIME[2018-05-02 12:45:29 +09:00]])
<https://github.com/whatwg/url/pull/382>

[18] [CITE@en[Move _charset_ handling to construct the form data set]]
([[tkent-google]]著, [TIME[2018-04-27 17:25:35 +09:00]])
<https://github.com/whatwg/html/commit/8c212e549607a41b6d40d953b47d9f3e749533f3>

[19] [CITE@en[<input type=hidden name=_charset_> doesn't match to browser implementations · Issue #3560 · whatwg/html]]
([TIME[2018-05-02 12:49:32 +09:00]])
<https://github.com/whatwg/html/issues/3560>

[20] [CITE@en[Move _charset_ handling from "multipart/form-data encoding algorithm"… by tkent-google · Pull Request #3645 · whatwg/html]]
([TIME[2018-05-02 12:50:26 +09:00]])
<https://github.com/whatwg/html/pull/3645>

[21] [CITE@en[Move _charset_ handling from "multipart/form-data encoding algorithm"… by tkent-google · Pull Request #3645 · whatwg/html]]
([TIME[2018-05-02 12:51:23 +09:00]])
<https://github.com/whatwg/html/pull/3645>