В 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, 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, даже те, которые могут быть закодированы на латыни-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, если хотя бы один символ в значениях формы не находится в кодировке страницы. Так как пользователь может переопределить
кодировку по умолчанию (которую Rails устанавливает в UTF-8), мы предоставляем скрытый ввод, содержащий символ Unicode, заставляя IE посмотреть на accept-charset.- Теперь, когда подавляющее большинство веб-ввода - это UTF-8, мы устанавливаем входящие параметры в UTF-8. Это исключит многие случаи несовместимых кодировок между ASCII-8BIT и
UTF-8.- Вы можете смело игнорировать параметры [: _ снеговик]
Короче говоря, вы можете смело игнорировать этот параметр.
Тем не менее, я не уверен, почему мы поддерживаем старые технологии, такие как Internet Explorer 5. По-моему, это совсем не решение Ruby on Rails, если вы спросите меня.