_charset_

_charset_

[12] かつて、フォーム提出で使用した文字コードを記述するために _charset_ という名前の特別なフォーム制御子が使われていました。

代替

[13] 現在となっては常に UTF-8 を用いるのが普通です。

[14] 今でも Webブラウザー_charset_ に対応していますが、 敢えて使う必要はほとんど残っていませんし、ライブラリーなどであっても対応していないことが少なくありません。

歴史

[1] IE には <input type="hidden" name="_charset_"/>form 要素中に潜ませておくと queryapplication/x-www-form-urlencoded_charset_=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 とかの古いブラウザは黙って _charset_=&other-param=value にしてくれるから安心・・・と思いきや、 NC 4.01 で試してみたらなぜか _charset_=++&other-param=value になりました。 value なしの hidden form control はどんな name でもこうなります。

HTML の仕様上、この文脈で value は本来必須なのですから、それが欠けている場合にどうなろうと実装依存なのでしょうけど、 なんでわざわざ ++ なんかを補うのか謎です。不具合でしょうかねぇ。

・・・という、未対応 UA の挙動が確定しないという問題がありますから、 _charset_ hack の信頼は避けた方が無難です。

例えば、鯖内で動くスクリプトの文字コード変換ルーチンを通す時には、 あらかじめ _charset_ 値を確認して、 明らかに異常な場合は捨てないと、 誤動作する虞があるでしょう。

[4] Web Forms 2.0 ( 版) <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] HTML5 Revision Tracker ( 版) <http://html5.org/tools/web-apps-tracker?from=4976&to=4977>

[8] RFC 7578 (multipart/form-data) も言及しています。

[7] RFC 7578 - Returning Values from Forms: multipart/form-data ( 版) <https://tools.ietf.org/html/rfc7578>

[9] Fix #32: use the encoding name exposed by DOM and HTML <form> · whatwg/encoding@18bf4fa ( 版) <https://github.com/whatwg/encoding/commit/18bf4fa6f005a899696800a8f6b0d20f3a4c1c0e>

[10] Editorial: Clarify <input name=_charset_> behavior (sideshowbarker著, ) <https://github.com/whatwg/html/commit/dca408ce9114c80a203dca571ff06aba4045ae47>

[11] Clarify package data algorithm for FormData (eehakkin著, ) <https://github.com/whatwg/fetch/commit/e03ee6fc7f6234005a058d9784e95861b9a0a301>

[15] Parse application/x-www-form-urlencoded using UTF-8 only (annevk著, ) <https://github.com/whatwg/url/commit/3fe969679f78c92c353047661b0c4b6797f099f6>

[16] Remove _charset_ handling from application/x-www-form-urlencoded (tkent-google著, ) <https://github.com/whatwg/url/commit/5c0d2ec09ec16099e5c453d088fea9b8ba0154a5>

[17] Remove _charset_ handling. by tkent-google · Pull Request #382 · whatwg/url () <https://github.com/whatwg/url/pull/382>

[18] Move _charset_ handling to construct the form data set (tkent-google著, ) <https://github.com/whatwg/html/commit/8c212e549607a41b6d40d953b47d9f3e749533f3>

[19] <input type=hidden name=_charset_> doesn't match to browser implementations · Issue #3560 · whatwg/html () <https://github.com/whatwg/html/issues/3560>

[20] Move _charset_ handling from "multipart/form-data encoding algorithm"… by tkent-google · Pull Request #3645 · whatwg/html () <https://github.com/whatwg/html/pull/3645>

[21] Move _charset_ handling from "multipart/form-data encoding algorithm"… by tkent-google · Pull Request #3645 · whatwg/html () <https://github.com/whatwg/html/pull/3645>