11

フォームで accept-charset="utf-8" 属性を使用していますが、ascii 以外でフォームを投稿すると、ヘッダーのリクエスト ヘッダーに異なる accept charset オプションがあることがわかりました。私が欠けているものはありますか?私のフォームは次のようになります

<form method="post" action="controller" accept-charset="UTF-8">
..input text box
.. submit button
</form>

前もって感謝します

4

1 に答える 1

9

質問は、自己矛盾しています。見出しには、accept-charsetパラメーターは何もしないと書かれていますが、質問の本文には、accept-charset属性 (これは正しい用語です) が使用されている場合、「ヘッダーには異なる accept charset オプションがあります。リクエストヘッダー」。後者のステートメントには否定が欠けていると思います。

ブラウザーAccept-Charsetは、独自の原則と設定に従って、HTTP 要求ヘッダーでパラメーターを送信します。たとえば、私の Chrome はAccept-Charset:windows-1252,utf-8;q=0.7,*;q=0.3. 通常、このようなヘッダーはサーバー側のソフトウェアでは無視されますが、サーバー側のソフトウェア (フォーム ハンドラー、この場合) は、応答で異なるエンコーディングを使用できます。

要素内のaccept-charset属性がformHTTP 要求ヘッダーに影響を与えることは想定されておらず、影響もありません。リクエスト内のフォーム データに使用する文字エンコーディングを指定するためのものであり、これが実際の動作です。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 エンコーディングとして送信されます。あらゆるキャラクターを扱える。

フォーム ハンドラーに応答で使用するエンコーディングを伝えたい場合は、フォームに非表示 (または非表示でない) フィールドを追加できます。

于 2012-10-11T06:15:14.073 に答える