Какой смысл добавлять utf8=✓ в запрос?

Из того, что я прочитал, кажется, что браузер должен отправлять данные 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:&#26408;

который затем кодируется в процентах соответствующим образом до %26%2326408%3B. Я убедился, что IE 8 делает то же самое в Windows. Итак, в чем смысл взлома UTF-8?

Связанный вопрос: Определение кодировки символов запроса HTTP POST




Ответы (1)


Техника добавления некоторых специальных символов в качестве скрытых данных была разработана в старые времена, когда разные браузеры отправляли данные в разных кодировках. Это описано, например. в документе Представление FORM и i18n следующим образом: «автор может добавить в форму тщательно проработанное скрытое поле, содержащее ряд диагностических символов. Когда это поле отправлено, сервер может исследовать формат того, что было отправлено, и сделать некоторые выводы относительно того, какую кодировку использовало клиентское программное обеспечение».

Этот метод потерял большую часть своей первоначальной актуальности, но это все еще дешевый способ выполнить базовую проверку правильности. Он может обнаруживать проблемы, например. когда кто-то создает копию формы и использует ее (по незнанию, невнимательности или другим причинам) для отправки данных, так что кодировка не та, что должна быть.

person Jukka K. Korpela    schedule 29.05.2013