Что такое параметр _snowman в Ruby on Rails 3?

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

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

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

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

Это означает, что, если пользователь ищет «Ché Guevara», он будет неправильно отображаться на стороне сервера. В Ruby 1.9 это приведет к ошибке кодирования, когда текст неизбежно пробивается в механизм регулярных выражений. В Ruby 1.8 это приведет к нарушению результатов для пользователя.

Создав параметр, который может быть понят только IE как символ Юникода, мы заставляем IE смотреть на атрибут accept-charset, который затем сообщает ему кодировать все символы как UTF-8, даже те, которые могут быть закодированы на латыни-1.

Имейте в виду, что в Ruby 1.8 чрезвычайно сложно получить данные Latin-1 в вашей базе данных UTF-8 (поскольку ничто во всем стеке не проверяет, что байты, которые пользователь отправил в любой момент, являются допустимыми символами UTF-8). В результате это чрезвычайно распространено для приложений Ruby (и приложений PHP и т. Д. И т. Д.), Чтобы показать эту ошибку, связанную с пользователем, и поэтому чрезвычайно часто для пользователей пытаться изменить кодировку как паллиативную меру.

Все, что сказало, когда я написал этот патч, я не понимал, что имя параметра будет когда-либо появляться в месте, обращенном к пользователю (это делается с формами, которые используют действие GET, например, формы поиска). Так как это так, мы переименуем этот параметр в _e и используем более безобидный вид юникодного символа.

Это здесь, чтобы поддерживать 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.
  • Вы можете смело игнорировать параметры [: _ snowman]

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

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

  • mvc Html.BeginForm другая схема URL
  • Кнопка загрузки элемента загрузки блогов загрузки Twitter
  • Давайте будем гением компьютера.