web-dev-qa-db-ja.com

application / x-www-form-urlencodedおよびcharset = "utf-8"?

Content-typeが;charset="utf-8"のときにapplication/x-www-form-urlencodedを省略するのが慣習ですか?

特に、formタグで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

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

27
ErikR

1)このメディアタイプには文字セットパラメータが定義されていません。

2)エンコードのガイドラインについては、 https://www.w3.org/TR/html5/sec-forms.html#application-x-www-form-urlencoded-encoding-algorithm を参照してください。

28
Julian Reschke

注:上記のリンクのステップ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属性の値に適用する必要があります。

4
atom88