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

Как установить "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 при смене IFrame document.location с помощью Javascript.

4b9b3361

Ответ 1

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

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


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

alt text