Subscribed unsubscribe Subscribe Subscribe

@kyanny's blog

Write down what I learnt. Opinions are my own.

FORM 要素の accept-charset 属性について

以下の HTML があるとき、

<!doctype html>
<html>
  <head>
    <meta charset="utf-8">
  </head>
  <body>
    <form action="http://localhost:9292" method="post" accept-charset="shift_jis">
      <input type="text" name="key1" value="ほげ">
      <button>submit</button>
    </form>
  </body>
</html>

このフォームを提出すると、ユーザエージェントはサーバに対し "ほげ" を Shift_JIS エンコーディングで送信するはずであり、実際そのようになる。

この挙動が、どの仕様のどの箇所に基づいてそうなっているのか、いまいちよくわからない。

accept-charset 属性の仕様は http://www.w3.org/TR/1999/REC-html401-19991224/interact/forms.html#adef-accept-charset に記載されている。

accept-charset = charset list [CI]
This attribute specifies the list of character encodings for input data that is accepted by the server processing this form. The value is a space- and/or comma-delimited list of charset values. The client must interpret this list as an exclusive-or list, i.e., the server is able to accept any single character encoding per entity received.
The default value for this attribute is the reserved string "UNKNOWN". User agents may interpret this value as the character encoding that was used to transmit the document containing this FORM element.

  • accept-charset 属性は、このフォームを処理するサーバが受け取る入力データの文字エンコーディングを指定する
  • 属性値はスペースかカンマで区切られた文字コードのリストで、クライアントはこのリストを排他的ORのリストとして解釈しなければならない(サーバは受け取るエンティティ毎にいずれか一つの文字エンコーディングを受け入れることができる)
  • 属性値のデフォルト値は "UNKNOWN" という予約された文字列である。ユーザエージェントはこの値を、このフォーム要素が含まれる文書を送信するときに使われた文字エンコーディングであると解釈しても良い

と書いてあるように読めるが、これらの情報からは「HTML 文書自体と異なる文字コードが accept-charset 属性値に指定されたフォームを提出するとき、ユーザエージェントはフォームのデータを accept-charset 属性値で指定された文字コードでエンコードして送信しなければならない」と定められているようには思えない。実際に accept-charset の指定どおりにフォームデータを送信するユーザエージェントがほとんどなのだろうし、それが当然だとも思うが、仕様として厳密に規定された上でそのように実装されているのか、たまたまユーザエージェントの実装者たちが気を利かせてくれているだけなのか、そのへんの確証が欲しいが他にどこを調べればよいかがわからない。

  1. accept-charset の仕様で規定されていて、自分の解釈・理解が追いついていない
  2. accept-charset 以外の仕様で規定されていて、自分が該当箇所を見つけられていない
  3. 仕様では規定されていないが慣習として多くのユーザエージェントがそのような振る舞いを実装している

おそらく 1. で、ひょっとすると 2. の可能性もある。どうすれば確証を得られるだろうか。

参考: HTML form要素 accept-charset属性の疑問点 - 三浦克介 - 情報科学研究科 - 大阪大学 近い内容だが少し違い、いま知りたいことの解決にはつながらなかった。

その他リンク

HTML Document Representation http://www.w3.org/TR/1999/REC-html401-19991224/charset.html#doc-char-set

Forms in HTML documents http://www.w3.org/TR/1999/REC-html401-19991224/interact/forms.html#h-17.3

Forms in HTML documents http://www.w3.org/TR/1999/REC-html401-19991224/interact/forms.html#h-17.13.3