В Ruby on Rails 3 (в настоящее время использование Беты 4), я вижу это при использовании form_tag
или form_for
помощники там являются скрытым названным полем _snowman
со значением ☃ (Unicode \x9731) разоблачение.
Так, для чего это?
Это сделано для поддержки Internet Explorer 5 и поощрения его к использованию UTF-8 для своих форм.
Сообщение о фиксации, которое можно увидеть здесь, описывает это следующим образом:
Исправьте несколько известных проблем с веб-кодировкой:
- Укажите accept-charset во всех формах. Все последние браузеры, а также IE5+, будут использовать указанную кодировку для параметров формы
- К сожалению, IE5+ не будет смотреть на accept-charset, пока хотя бы один символ в значениях формы не в кодировке страницы. Поскольку пользователь может переопределить используемую по умолчанию
charset (который Rails устанавливает на UTF-8), мы предоставляем скрытый ввод, содержащий символ юникода, заставляя IE посмотреть на accept-charset.- Теперь, когда подавляющее большинство вводимых в Интернете данных имеет формат UTF-8, мы устанавливаем входящие параметры на UTF-8. Это позволит устранит многие случаи несовместимости кодировок между ASCII-8BIT и
UTF-8.- Вы можете спокойно игнорировать params[:_snowman]
Короче говоря, вы можете спокойно игнорировать этот параметр.
Тем не менее, я не уверен, почему мы поддерживаем старые технологии, такие как Internet Explorer 5. Как по мне, это очень не-Ruby on Rails решение.
Этот параметр был добавлен в формы чтобы заставить Internet Explorer (5, 6, 7 и 8) кодировать свои параметры как unicode.
В частности, эта ошибка может быть вызвана, если пользователь переключает кодировку браузера на Latin-1. Чтобы понять, почему пользователь решил сделать что-то, казалось бы, настолько безумное, просмотрите этот поиск Google . После того, как пользователь переведет веб-сайт в режим Latin-1, если они будут использовать символы, которые можно понимать как Latin-1 и Unicode (например, é или ç, общие в именах), Internet Explorer закодирует их на латинском языке. -1.
Это означает, что если пользователь выполняет поиск по запросу «Че Гевара», он будет неправильно отображаться на стороне сервера. В Ruby 1.9 это приведет к ошибке кодирования, когда текст неизбежно попадет в обработчик регулярных выражений. В Ruby 1.8 это приведет к неверным результатам для пользователя.
Создавая параметр, который может восприниматься только IE как символ Юникода, мы заставляем IE смотреть на атрибут accept-charset, который затем сообщает ему кодировать все символы как UTF-8, даже те, которые можно закодировать в Latin-1.
Имейте в виду, что в Ruby 1.8, чрезвычайно легко получить данные Latin-1 в вашей базе данных UTF-8 (поскольку ничто во всем стеке не проверяет, являются ли байты, отправленные пользователем в любой момент, допустимыми символами UTF-8). В результате приложения Ruby (а также приложения PHP и т. Д.) Очень часто обнаруживают эту ошибку, обращенную к пользователю, и поэтому чрезвычайно часто пользователи пытаются изменить кодировку в качестве паллиативной меры.
С учетом всего сказанного, когда я писал этот патч, я не понимал, что имя параметра когда-либо появится в месте, доступном пользователю (это происходит с формами, которые используют действие GET, такими как формы поиска). Поскольку это так, мы переименуем этот параметр в _e
и будем использовать более безобидный на вид символ Юникода.