В Ruby on Rails 3 (в настоящее время используется бета-версия 4), я вижу, что при использовании помощников form_tag
или form_for
существует скрытое поле с именем _snowman
со значением ☃ (Unicode\x9731).
Итак, для чего это?
В Ruby on Rails 3 (в настоящее время используется бета-версия 4), я вижу, что при использовании помощников form_tag
или form_for
существует скрытое поле с именем _snowman
со значением ☃ (Unicode\x9731).
Итак, для чего это?
Здесь вы можете поддержать Internet Explorer 5 и рекомендовать использовать UTF-8 для своих форм.
Сообщаемое сообщение фиксации здесь детализирует его следующим образом:
Исправить несколько известных проблем с веб-кодированием:
- Укажите accept-charset для всех форм. Все последние браузеры, а также IE5 +, будет использовать указанную кодировку для параметров формы
- К сожалению, IE5 + не будет рассматривать accept-charset, если хотя бы один символ в значениях формы не на странице charset. Поскольку пользователь может переопределить значение по умолчанию charset (который Rails устанавливает UTF-8), мы предоставляем скрытый ввод, содержащий символ Юникода, заставляющий IE посмотрите на accept-charset.
- Теперь, когда подавляющее большинство веб-вкладов UTF-8, мы устанавливаем входящий параметры для UTF-8. Это будет устранить многие случаи несовместимости кодировки между ASCII-8BIT и
UTF-8.- Вы можете смело игнорировать параметры [: _ snowman]
Короче говоря, вы можете смело игнорировать этот параметр.
Тем не менее, я не уверен, почему мы поддерживаем старые технологии, такие как Internet Explorer 5. Кажется, это очень не-Ruby on Rails решение, если вы спросите меня.
Этот параметр был добавлен в формы, чтобы заставить 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, даже те, которые может быть закодирован на латинском языке.
Имейте в виду, что в Ruby 1.8 крайне сложно получить данные Latin-1 в вашей базе данных UTF-8 (так как ничто во всем стеке не проверяет, что байты, которые пользователь отправил в любой момент, являются действительными UTF-8 персонажи). В результате это чрезвычайно распространено для приложений Ruby (и приложений PHP и т.д. И т.д.), Чтобы показать эту ошибку, обращенную к пользователю, и поэтому чрезвычайно часто для пользователей пытаться изменить кодировку как паллиативную меру.
Все, что сказало, когда я написал этот патч, я не понимал, что имя параметра когда-либо появится в месте, обращенном к пользователю (это делается с формами, которые используют действие GET, например, формы поиска). Так как это так, мы переименуем этот параметр в _e
и используем более безобидный вид юникодного символа.