Как установить «Content-Type ... charset» в заголовке запроса, используя ссылку HTML - PullRequest
19 голосов
/ 03 июня 2011

У меня есть простая HTML-страница со ссылкой в ​​кодировке UTF-8.

<html>
  <head>
    <meta http-equiv="content-type" content="text/html; charset=UTF-8">
  </head>
  <body>
    <a charset='UTF-8' href='http://server/search?q=%C3%BC'>search for "ü"</a>
  </body>
</html>

Однако браузер не включает Content-Type:application/x-www-form-urlencoded; charset=utf-8 в заголовок запроса. Поэтому я должен настроить веб-сервер так, чтобы все запросы были закодированы в кодировке UTF-8 (URIEncoding = "UTF-8" в Tomcat server.xml). Но, конечно, администратор не позволит мне сделать это в производственной среде (Websphere).

Я знаю, что с помощью Ajax добиться этого довольно просто, но как я могу контролировать заголовок запроса при использовании стандартных ссылок HTML? Атрибут charset, похоже, не работает для меня (проверено в IE8 и FF 3.5)

Вторая часть необходимого решения будет заключаться в установке кодировки URL при изменении document.location IFrame с использованием Javascript.

1 Ответ

20 голосов
/ 03 июня 2011

Это невозможно с помощью HTML.Самое близкое, что вы можете получить, это accept-charset атрибут <form>.Только браузер MSIE придерживается этого, но даже тогда он делает это неправильно (например, CP1252 фактически использовался, когда он говорит, что отправил ISO-8859-1).Другие браузеры полностью игнорируют его и используют кодировку, как указано в заголовке Content-Type ответа.Установка правильной кодировки символов в основном полностью отвечает серверной стороне.Клиентская сторона должна просто отправить его обратно в той же кодировке, в которой сервер отправил ответ.

Кстати, вам действительно нужно полностью сконфигурировать кодировку символов со стороны сервера.Чтобы преодолеть невозможность редактирования атрибута URIEncoding, кто-то из SO написал (сложный) фильтр: Автоматическое определение кодировки URI в Tomcat .Вы можете также найти это полезным (примечание: я не проверял это).


Обновление : Следует отметить, что метатег, указанный в вашем вопросе, игнорируется при передаче контента по HTTP.Вместо этого HTTP-заголовок ответа Content-Type будет использоваться для определения типа содержимого и кодировки символов.Заголовок HTTP можно определить, например, с помощью Firebug на панели Net .

alt text

...