Как вынудить браузер установить набор символов в типе контента http заголовок

Простой файл HTML:

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">

<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
</head>
<body>
<form method="POST" action="test.jsp" accept-charset="utf-8" method="post" enctype="application/x-www-form-urlencoded" >
    <input type="text" name="P"/>
    <input type="submit" value="subMit"/>
</form>
</body>
</html>

Файл HTML подается сервером с помощью заголовка Content-Type:text/html; charset=utf-8. Все говорит: "дорогой браузер при регистрации этой формы отправляет ее закодированный utf-8". Браузер на самом деле делает это. Каждое значение, вводимое в поле ввода, будет закодированным UTF-8. НО привычка браузера говорит это серверу! HTTP-заголовок запроса сообщения будет содержать a Content-Type:application/x-www-form-urlencoded поле, но набор символов будет опущено (протестированный с FF3.6 и IE8).

Проблемой является сервер приложений, который я использую (Tomcat6), ожидает набор символов в заголовке Типа контента (как указано в RFC2388). Как это: Content-Type:application/x-www-form-urlencoded;charset=utf-8. Если набор символов будет опущен, то он примет ISO-8859-1, который не является набором символов, используемым для кодирования. Результатом являются поврежденные данные.

У кого-то есть подсказка, как вынудить текущие браузеры добавить набор символов к заголовку Типа контента?

12
задан Eduard Wirch 10 March 2010 в 17:13
поделиться

1 ответ

Кто-нибудь знает, как заставить текущие браузеры добавлять кодировку в заголовок Content-Type?

Нет, ни в одном браузере никогда не было предоставил параметр charset с типом носителя application / x-www-form-urlencoded . Более того, спецификация HTML, определяющая этот тип, не предлагает параметр charset , поэтому сервер не может разумно ожидать его получения.

(HTML4 ожидает кодировки для частей представления multipart / form-data , но даже в этом случае ни один браузер на самом деле не соответствует).)

accept-charset = "utf-8"

accept-charset не работает в IE и не должен использоваться.В любом случае это не повлияет на формы на страницах, обслуживаемых как UTF-8, но в других случаях это может привести к противоречивым результатам.

Нет, с формами вы просто должны обслуживать страницу, в которой они находятся, как UTF-8, а результаты должны возвращаться как UTF-8 (без каких-либо опознавательных знаков, чтобы сообщить вам об этом (за исключением потенциально _charset_ взломать , но Tomcat не поддерживает это).

Таким образом, вы должны указать контейнеру сервлетов, какую кодировку использовать для параметров, если вы не хотите, чтобы он возвращался к значениям по умолчанию (которые обычно неверно). В ограниченном наборе обстоятельств вы можете вызвать ServletRequest.setCharacterEncoding () , чтобы сделать это, но это имеет тенденцию быть хрупким и вообще не работает для параметров, взятых из строка запроса. К сожалению, для этого не существует стандартизированного исправления на уровне сервлета. Для Tomcat обычно приходится возиться с server.xml вместо того, чтобы исправлять его в приложении.

11
ответ дан 2 December 2019 в 22:04
поделиться
Другие вопросы по тегам:

Похожие вопросы: