Как установить "Content-Type ... charset" в заголовке запроса, используя ссылку HTML

У меня есть простая 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 используя Javascript.

1 ответ

Решение

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

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


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

альтернативный текст

Другие вопросы по тегам