33

;charset="utf-8"Content-type が の場合は省略するのが通例application/x-www-form-urlencodedですか?

特に、accept-charset="utf-8"フォーム タグで使用する場合、ヘッダーで utf-8 が使用されていることを示す何らかの兆候が期待されますが、何も表示されません。

これがChromeでの簡単なテストです。フォームページは次のとおりです。

<html>
<head>
<meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
</head>
<body>
<form method="POST" action="printenv.cgi" accept-charset="utf-8">
Your name:
<input name="name" type="text" size="30">
</form>
</body>
</html>

生成されたリクエストのヘッダーは次のとおりです。

POST /printenv.cgi HTTP/1.1
Host: ...:8000
Connection: keep-alive
Content-Length: 19
Cache-Control: max-age=0
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Origin: http://...:8000
User-Agent: Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/27.0.1453.94 Safari/537.36
Content-Type: application/x-www-form-urlencoded
Referer: http://...:8000/utf8-test.html
Accept-Encoding: gzip,deflate,sdch
Accept-Language: en-US,en;q=0.8

フォーム パラメータ値のエンコード方法を指定する規則は何ですか?

4

2 に答える 2

33
  1. このメディア タイプに定義された文字セット パラメータはありません。

  2. エンコードのガイドラインについては、https://url.spec.whatwg.org/#application/x-www-form-urlencodedを参照してください。

標準ではapplication/x-www-form-urlencoded、UTF-8 とパーセント エンコーディングが暗示されています。

けれど:

従来のサーバー指向の実装では、UTF-8 以外のエンコーディングをサポートする必要があり、名前が_charset. UTF-8 のみが準拠しているため、このようなロジックはここでは説明しません。

于 2013-05-30T06:05:45.473 に答える
5

注: 上記のリンクのステップ 2 では、「それ以外の場合は、選択した文字エンコーディングをUTF-8にしてください。」(参照: http://www.w3.org/TR/html5/forms.html#application/x-www-form-urlencoded-encoding-algorithm。)

また、これは、ユーザー エージェントが UTF-8 を使用するのがベスト プラクティスであることを示していると思いますか?

http://www.w3.org/TR/html40/appendix/notes.html#non-ascii-chars

B.2.1 URI 属性値の非 ASCII 文字

URI には非 ASCII 値は含まれませんが ([URI]、セクション 2.1 を参照)、作成者は URI を期待する属性値でそれらを指定することがあります (つまり、DTD で %URI; で定義されます)。たとえば、次の href 値は不正です。

...

このような場合、非 ASCII 文字を処理するためにユーザー エージェントが次の規則を採用することをお勧めします。

Represent each character in UTF-8 (see [RFC2279]) as one or more bytes.
Escape these bytes with the URI escaping mechanism (i.e., by converting each byte to %HH, where HH is the hexadecimal notation of the byte value).

この手順により、URI を運ぶ HTML ドキュメントがトランスコードされた可能性のある文字エンコーディングとは無関係な、構文的に正当な URI ([RFC1738] のセクション 2.2 または [RFC2141] のセクション 2 で定義) が得られます。

ノート。一部の古いユーザー エージェントは、ドキュメントが受信された文字エンコーディングのバイトを使用して、HTML の URI を簡単に処理します。一部の古い HTML ドキュメントはこの方法に依存しており、トランスコードすると壊れます。これらの古いドキュメントを処理したいユーザー エージェントは、法定セット外の文字を含む URI を受信したときに、最初に UTF-8 に基づく変換を使用する必要があります。結果の URI が解決されない場合にのみ、ドキュメントを受信した文字エンコーディングのバイトに基づいて URI の構築を試みる必要があります。

ノート。UTF-8 に基づく同じ変換を、A 要素の name 属性の値に適用する必要があります。

于 2014-12-30T22:00:36.807 に答える