質問は、自己矛盾しています。見出しには、accept-charset
パラメーターは何もしないと書かれていますが、質問の本文には、accept-charset
属性 (これは正しい用語です) が使用されている場合、「ヘッダーには異なる accept charset オプションがあります。リクエストヘッダー」。後者のステートメントには否定が欠けていると思います。
ブラウザーAccept-Charset
は、独自の原則と設定に従って、HTTP 要求ヘッダーでパラメーターを送信します。たとえば、私の Chrome はAccept-Charset:windows-1252,utf-8;q=0.7,*;q=0.3
. 通常、このようなヘッダーはサーバー側のソフトウェアでは無視されますが、サーバー側のソフトウェア (フォーム ハンドラー、この場合) は、応答で異なるエンコーディングを使用できます。
要素内のaccept-charset
属性がform
HTTP 要求ヘッダーに影響を与えることは想定されておらず、影響もありません。リクエスト内のフォーム データに使用する文字エンコーディングを指定するためのものであり、これが実際の動作です。HTML 4.01 仕様はこれについて不明瞭ですが、W3C HTML5 ドラフトではより適切に記述されていますが、何らかの奇妙な理由で複数形が使用されています: 「提出に使用される文字エンコードを提供します」. その理由は、ブラウザが優先エンコーディングを使用できない状況に備えて、別のエンコーディングを指定できるからだと思います。たとえば Chrome で実際に起こることは、 を使用するaccept-charset="foobar utt-8"
と UTF-8 が使用されるということです。
実際には、この属性は、フォームを含むページのエンコーディングとは異なるデータ送信のエンコーディングを作成するために使用されます。ページが ISO-8859-1 でエンコードされていて、誰かがギリシャ文字またはヘブライ文字をフォームに入力したとします。これらの文字は ISO-8859-1 では表現できないため、ブラウザは何らかのエラー回復を行う必要があります。(実際には、文字を数値文字参照に変換します。これは論理的にはすべて間違っていますが、実用的にはおそらく最善の方法です。)<form charset=utf-8>
ここでのヘルプの使用: エンコーディングが何であれ、フォーム データは UTF-8 エンコーディングとして送信されます。あらゆるキャラクターを扱える。
フォーム ハンドラーに応答で使用するエンコーディングを伝えたい場合は、フォームに非表示 (または非表示でない) フィールドを追加できます。