У Ruby on Rails 3 (зараз використовується Beta 4) я бачу, що при використанні form_tag
або form_for
helpers з’являється приховане поле, назване _snowman
зі значенням ☃ ( Unicode \ x9731).
Отже, для чого це?
У Ruby on Rails 3 (зараз використовується Beta 4) я бачу, що при використанні form_tag
або form_for
helpers з’являється приховане поле, назване _snowman
зі значенням ☃ ( Unicode \ x9731).
Отже, для чого це?
Відповіді:
Цей параметр було додано до форм, щоб змусити Internet Explorer (5, 6, 7 і 8) кодувати його параметри унікодом.
Зокрема, ця помилка може бути спровокована, якщо користувач переключить кодування браузера на Latin-1. Щоб зрозуміти, чому користувач вирішив би зробити щось, здавалося б, таке божевільне, перегляньте цей пошук у Google . Після того, як користувач переведе веб-сайт у режим Latin-1, якщо він використовує символи, які можна зрозуміти як Latin-1 та Unicode (наприклад, é або ç, поширені в іменах), Internet Explorer кодує їх латиною -1.
Це означає, що якщо користувач шукає "Ché Guevara", він буде неправильно переходити на сторону сервера. У Ruby 1.9 це призведе до помилки кодування, коли текст неминуче пробивається в механізм регулярних виразів. У Ruby 1.8 це призведе до неполадок для користувача.
Створюючи параметр, який може бути зрозумілий тільки IE як символ unicode, ми змушуємо IE дивитися на атрибут accept-charset, який потім повідомляє йому кодувати всі символи як UTF-8, навіть ті, які можна закодувати. латинською-1.
Майте на увазі, що в Ruby 1.8 вкрай тривіально отримувати дані Latin-1 у вашу базу даних UTF-8 (оскільки ніщо у цілому стеку не перевіряє, що байти, надіслані користувачем у будь-який момент, є дійсними символами UTF-8). Як результат, в програмах Ruby (і PHP-програмах тощо, тощо) надзвичайно часто виявляти цю помилку, орієнтовану на користувачів, і тому надзвичайно часто користувачі намагаються змінити кодування як паліативну міру.
Все, що було сказано, коли я писав цей патч, я не розумів, що ім'я параметра коли-небудь з’явиться в обраному користувачем місці (це стосується форм, які використовують дію GET, наприклад, форми пошуку). Оскільки це так, ми перейменовуємо цей параметр у _e
та використовуватимемо більш нешкідливий зовнішній символ символу.
Це тут, щоб підтримувати Internet Explorer 5 та заохочувати його використовувати UTF-8 для своїх форм.
Повідомлення про фіксацію, яке ви бачите тут, докладно описує наступне:
Виправте кілька відомих проблем веб-кодування:
- Укажіть акцепт-схему на всіх формах. Усі останні браузери, а також 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.