Подтвердить что ты не робот

Application/x-www-form-urlencoded и charset = "utf-8"?

Как правило, опускать ;charset="utf-8", когда тип содержимого 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

Что означает соглашение о том, как кодировать значения параметров формы?

4b9b3361

Ответ 2

Примечание. что на шаге 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 Не-ASCII-символы в значениях атрибута URI

Хотя URI не содержат значений, отличных от ASCII (см. [URI], раздел 2.1), авторы иногда указывают их в значениях атрибутов, ожидающих URI (т.е. определяемых с помощью URI, в DTD). Например, следующее значение 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 (как определено в [RFC1738], раздел 2.2 или [RFC2141], раздел 2), который не зависит от кодировки символов, к которой HTML-документ, несущий URI, может быть перекодирован.

Примечание. Некоторые более старые пользовательские агенты тривиально обрабатывают URI в HTML, используя байты кодировки символов, в которой был получен документ. Некоторые старые HTML-документы полагаются на эту практику и ломаются при перекодировке. Пользовательские агенты, которые хотят обрабатывать эти старые документы, должны при получении URI, содержащих символы вне юридического набора, сначала использовать преобразование на основе UTF-8. Только если результирующий URI не разрешит, если они попытаются создать URI на основе байтов кодировки символов, в которой был получен документ.

Примечание. То же преобразование, основанное на UTF-8, должно применяться к значениям атрибута name для элемента A.