Из того, что я прочитал, кажется, что браузер должен отправлять данные x-www-form-urlencoded в запросе в наборе символов формы, из которой был сгенерирован запрос.
Итак, почему некоторые веб-сайты, такие как http://www.railscasts.com, добавляют ?utf8= %E2%9C%93 (это ?utf8=✓) в формы? Это хак, который упрощает что-то делать? Набор символов этой страницы уже UTF-8 (я проверил заголовки), поэтому не может ли он гарантировать, что браузер будет отправлять UTF-8? Какие браузеры этого не делают? По данным w3schools, все основные браузеры реализуют прием кодировки из форм:
<form accept-charset="UTF-8">
так почему это не используется вместо этого? Или вообще ничего (поскольку в ответе указано UTF-8)?
Я провел небольшое расследование:
На странице UTF-8 кажется, что поиск 木 (U+6728) дает:
search:%E6%9C%A8
Таким образом, он использует процентное кодирование, которое, по-видимому, представляет собой побайтовое кодирование шестнадцатеричной кодировки любого базового набора символов. Что ж, это определенно работает, потому что это место говорит, что это Кодировка UTF-8. Это хорошо, но это простой случай, когда я пытаюсь отправить данные UTF-8 на страницу UTF-8.
Теперь предположим, что у меня есть страница ISO-8859-1, на которой есть форма. Это форма GET, и я решаю ввести одно и то же 木
для поля. Ну, это определенно не ISO-8859-1. Итак, Chrome кодирует его в
search:木
который затем кодируется в процентах соответствующим образом до %26%2326408%3B
. Я убедился, что IE 8 делает то же самое в Windows. Итак, в чем смысл взлома UTF-8?
Связанный вопрос: Определение кодировки символов запроса HTTP POST а>