Символы нежелательной почты, добавляемые в строку при чтении параметров HTTP-запроса

1

У меня есть html-форма:

<p> Select beer characteristics </p>
<p> 
  Color: 
  <select name="color" size="1">
    <option value="light"> light </option>
    <option value="amber"> amber </option>
    <option value="brown"> brown </option>
    <option value="dark"> dark </option>
  </select>
  <br><br> 
</p>
<input type = "submit" value="submit">
  • для входного параметра name = "color", есть четыре варианта: светлый, янтарный, коричневый, темный
  • на основе которого выбрано значение, отображается страница результатов
  • однако, когда я выбираю параметр, есть некоторые нежелательные символы, которые добавляются спереди и в конце строки для значения параметра
  • при отладке это значение читается (при выборе "янтарный"), когда я читаю с использованием request.getParameter("color"), выглядит так: â € amberâ €
  • это вызывает проблему на заднем конце, где я хочу выполнить совпадение строк с входным параметром

Какие-либо предложения?

Теги:
servlets
httprequest
html-form

4 ответа

2

Вы используете неправильный тип символов кавычек в своем HTML-коде.

Вероятно, у вас есть что-то вроде этого:

<option value="light">

Если вы не используете правильные двойные кавычки (") или одинарные кавычки ('), чтобы заключить атрибут, браузер интерпретирует значение как "light" и не light, а также то, что он отправляет на сервер.

(Обратите внимание, что это недействительно в XHTML, где разрешены только цитируемые атрибуты, но в простых атрибутах HTML, заданных в формате <foo bar=value>).

Странный вывод можно объяснить тем, что ваш браузер и ваш сервер используют разные кодировки: один использует ISO-8859-1 и другой UTF-8. Последовательность UTF-8 для символа левой двойной кавычки равна 0xe2 0x80 0x9c, которая при чтении с ISO-8859-1 дает точно два указанных вами символа. (Третий попадает в неиспользуемый блок и тихо отбрасывается).

Это отдельная проблема, которая также нуждается в исправлении, см. Другие ответы на советы по ее устранению.

  • 0
    Какая? Неправильные цитаты где? О, вы имеете в виду в источнике HTML? Они отображаются как обычные цитаты для меня.
  • 0
    @DaveNewton Да, хотя HTML-код в вопросе содержит правильный символ, я распознаю вывод как неправильно закодированную левую или правую двойную кавычку (я забыл, какой)
Показать ещё 2 комментария
2

Я совершенно уверен, что это связано с несоответствием кодировки символов или URL-адресов.

Прежде всего, обязательно укажите кодировку

<form action="..." method="..." accept-charset="UTF-8">
    <select ...> ... </select>
</form>

Если клиент правильно отправляет все ваши данные с хорошей кодировкой (UTF-8), вам также нужно настроить серверную часть для чтения данных.

Я не знаю, что вы используете, но один метод:

URLDecoder.decode(formParams, "UTF-8");

Конечно, вы можете добавить кодировку в свой HTML файл:

<head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    ...
</head>

Изменение: обязательно отправляйте и получайте все данные правильно.

Отправка HTML файла с сервера:

1) Обязательно установите это:
Content-Type: text/html; кодировка = UTF-8

Если вы отправляете файл, обязательно сохраните файл, используя кодировку UTF-8. Если ваш HTML является сгенерированной строкой, используйте:

PrintWriter writer = new PrintWriter(new OutputStreamWriter(httpOutputStream, "UTF-8"));
writer.print(string);
...

URL-адрес запроса получен в кодировке US-ASCII:

String urlEncodedString = new String(receivedBytes, "UTF-8");
String decoded = URLDecoder.decode(urlEncodedString, "UTF-8");
1

Это результат неправильного кодирования в браузере, который, скорее всего, не установлен в ответ. Вы можете попытаться использовать:

response.setContentType("text/html; charset=UTF-8");
0

Я столкнулся с такой же проблемой при преобразовании xhtml в PDF с помощью инструмента wkhtmltopdf.

Добавление <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"> в моем шаблоне HTML решило проблему.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню