Для чего нужен параметр _snowman в формах Ruby on Rails 3? - PullRequest
170 голосов
/ 11 июля 2010

В Ruby on Rails 3 (в настоящее время используется бета-версия 4) я вижу, что при использовании помощников form_tag или form_for есть скрытое поле с именем _snowman со значением ☃ ( Unicode * 1005).* \ x9731) появляется.

Итак, для чего это нужно?

Ответы [ 2 ]

301 голосов
/ 28 июля 2010

Этот параметр был добавлен в формы для того, чтобы заставить Internet Explorer (5, 6, 7 и 8) кодировать свои параметры как Unicode.

В частности, эта ошибка может быть вызванаесли пользователь переключает кодировку браузера на Latin-1.Чтобы понять, почему пользователь решил сделать что-то сумасшедшее, посмотрите в этом поиске Google .Когда пользователь переводит веб-сайт в режим Latin-1, если он использует символы, которые можно понимать как Latin-1 и Unicode (например, é или ç, общие по именам), Internet Explorer закодирует их на латинице.-1.

Это означает, что если пользователь ищет «Ché Guevara», он будет неправильно проходить на стороне сервера.В 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, и т. Д.) Очень часто демонстрируют эту ошибку, с которой сталкиваются пользователи, и поэтому пользователи очень часто пытаются изменить кодировку как паллиативную меру.

* 1016Все это говорит о том, что когда я писал этот патч, я не осознавал, что имя параметра будет когда-либо появляться в месте, обращенном к пользователю (это происходит с формами, использующими действие GET, такими как формы поиска).Поскольку это так, мы переименуем этот параметр в _e и будем использовать более невинный вид символа Юникода.
55 голосов
/ 11 июля 2010

Это здесь для поддержки Internet Explorer 5 и поощрения использования UTF-8 для своих форм.

Сообщение о коммите, замеченное здесь , детализирует его следующим образом:

Исправлено несколько известных проблем веб-кодирования:

  • Укажите accept-charset во всех формах.Все последние браузеры, а также IE5 +, будут использовать кодировку, указанную для параметров формы
  • К сожалению, IE5 + не будет смотреть на accept-charset, если хотя бы один символ в значениях формы не находится в кодировке страницы.Так как пользователь может переопределить набор символов
    по умолчанию (который Rails устанавливает в UTF-8), мы предоставляем скрытый ввод, содержащий символ Юникода, заставляя IE посмотреть на accept-charset.
  • Теперь, когдаПодавляющее большинство веб-ввода - это UTF-8, мы устанавливаем входящие параметры в UTF-8.Это устранит многие случаи несовместимых кодировок между ASCII-8BIT и
    UTF-8.
  • Вы можете спокойно игнорировать параметры [: _ snowman]

Короче говоря,Вы можете спокойно игнорировать этот параметр.

Тем не менее, я не уверен, почему мы поддерживаем старые технологии, такие как Internet Explorer 5. Похоже, что решение Ruby on Rails очень не совсем, если вы спросите меня.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...