/ HTML form要素 accept-charset属性の疑問点 - 三浦克介 - 情報科学研究科 - 大阪大学

豆知識

概要

W3C勧告「HTML4.01仕様書<form>要素accept-charset属性の説明についての疑問点について述べています。疑問点は、一つのフォーム内で、ブラウザが送信するデータの文字エンコーディングが統一されていないければならないか否かという点と、accept-charsetが指定されていない時に、ブラウザがフォームデータの送信に使うべき文字エンコーディングについて、の2点です。

W3Cの原文とその訳

W3C勧告「HTML4.01仕様書<form>要素accept-charset属性の原文と、その訳 (訳者:三浦克介)*1 を示します。


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 = charset list [CI]
この属性は、このフォームを処理するサーバーが受理可能な、入力データの文字 エンコーディングを指定します。値は、スペースとコンマ (スペースまたはコン マ) で区切られた charset 値のリストです。クライアントは、このリストを排 他的ORのリストとして解釈しなければなりません。即ち、サーバーは受け取った entity 毎に、一つの文字エンコーディングを受理可能であるということで す。
この属性の既定値は、予約語 "UNKNOWN" です。ブラウザは、この値を、このフォー ム要素が含まれている文書を送信する際に用いられた文字エンコーディングと同 一、と 解釈することでしょう

entity は何を指すか?

疑問点の1点目は、前半の段落の entity が何を指すかです。フォーム内に 配置されている <input> 要素を指すか、<form> を指すか、のいずれかだろうと 思うのですが、良く分かりません。いくつかの日本語訳を見てみたのですが、ど の訳も、このあたりがハッキリと分かる訳にはなっていません。

もしも前者 (<input>要素を指す) であると、入力フィールド毎にエンコーディ ングが違っても良いことになります。例えば、フォーム内に3つの入力フィール ド (3つの<input>要素) があった場合、それぞれ別のエンコーディングが許され ることになります。サーバーでコード検出をするので、JIS でも EUC でも SJIS でも OK だよ、ということで、 accept-charset="iso-2022-jp,EUC-JP,Shift_JIS" などと記述すると、3つのフィー ルドが全て異なるエンコーディングで送られて来ても文句は言えない、というこ とになってしまいます。

後者 (entity が <form> 要素を指す ) であると、フォーム内の全ての入力 フィールド (<input> 要素) のデータは、全て同じエンコーディングで送信され なければならないことになります。

entity は、一般的には「実体」などと訳されますが、リーダース英和辞書 第2版によれば、

(属性などに対して) 本質(essence), 実体(substance)

という意味があり、この意味であるとすると、ここで「属性」とは "accept-charset" であり、これに対する「実体」とは <form> ということにな るので、後者 (entity が <form> 要素を指す ) が正しそうだとは思ってい るのですが‥‥。


後記
笠原規男さんのご指摘によると、entityはHTMLのメッセージボディを指すとのことです。<input>、<form> いずれもとも、違いましたが、クライアントから送られてくる文字エンコーディングは一つということですね。

仕様書なのに may

疑問点の2番目は、accept-charsetが指定されていない時のブラウザの対応とし て、"User agents may interpret..." と記述されている点です。 must ではなく may と。「ブラウザは‥‥しなければいけない」ではな く、「ブラウザは‥‥することでしょう」と言っています。

つまり、「accept-charsetが指定されていない時は、ブラウザは、フォームが含 まれている文書と同じエンコーディングでGET/POSTデータを送るのが望ましいが、 必ずしも、そうでなくても良い」と言っていると読みとれます。

結局、accept-charsetを指定しない場合は、どんなエンコーディングでデータが 送られてきても文句は言えないってことなんでしょうか。


後記
笠原規男さんのご指摘によると、RFC/W3Cにおける「may」はオプションであることを意味するそうです。ということで、やはり、クライアントの挙動については、確定的なことは言えないわけですね。

コメント

この情報は・・・、

選択肢 投票
役に立った 51  
役に立たなかった 15  
どちらとも言えない 4  
  • ちょうど同じことで悩んでいて非常に役立った。が、「役に立った」ボタンが無いっス。先輩 -- もりた? 2004-12-14 (火) 16:54:23
    • つけました。 -- 三浦克介 2005-02-01 (火) 21:17:13
  • 仕様書などでの助動詞の使い分けについては、 http://tazya.blog61.fc2.com/blog-entry-14.html あたりを参照すると良いでしょう。リンクはRFCについて書いていますが、W3Cの文書でも基本的に同じです。 mayはオプションですから、実装してもしなくても良いということです。ですから、accept-charsetに対応していないブラウザでも、「HTML4.01準拠」と言っていいことになります。 entityとは平たく言ってしまえばHTTPのメッセージのボディのことです。ですから、submitされたformにつき1つのキャラクタセットということになります。笠原規男? 2010-12-09 (木) 16:23:00
    • 有益な情報、ありがとうございます。よくわかりました。 -- 三浦克介 2011-01-26 (水) 23:16:14

*1 訳が正確であるという保証は一切ありません

トップ   編集 凍結 差分 バックアップ 添付 複製 名前変更 リロード   新規 一覧 単語検索 最終更新   ヘルプ   最終更新のRSS
Last-modified: 2015-07-17 (金) 20:27:53 (317d)