У меня есть 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">
Какие-либо предложения?
Вы используете неправильный тип символов кавычек в своем HTML-коде.
Вероятно, у вас есть что-то вроде этого:
<option value="light">
Если вы не используете правильные двойные кавычки (") или одинарные кавычки ('), чтобы заключить атрибут, браузер интерпретирует значение как "light"
и не light
, а также то, что он отправляет на сервер.
(Обратите внимание, что это недействительно в XHTML, где разрешены только цитируемые атрибуты, но в простых атрибутах HTML, заданных в формате <foo bar=value>
).
Странный вывод можно объяснить тем, что ваш браузер и ваш сервер используют разные кодировки: один использует ISO-8859-1 и другой UTF-8. Последовательность UTF-8 для символа левой двойной кавычки равна 0xe2 0x80 0x9c
, которая при чтении с ISO-8859-1 дает точно два указанных вами символа. (Третий попадает в неиспользуемый блок и тихо отбрасывается).
Это отдельная проблема, которая также нуждается в исправлении, см. Другие ответы на советы по ее устранению.
Я совершенно уверен, что это связано с несоответствием кодировки символов или 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");
Это результат неправильного кодирования в браузере, который, скорее всего, не установлен в ответ. Вы можете попытаться использовать:
response.setContentType("text/html; charset=UTF-8");
Я столкнулся с такой же проблемой при преобразовании xhtml в PDF с помощью инструмента wkhtmltopdf.
Добавление <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
в моем шаблоне HTML решило проблему.