Dans Ruby on Rails 3 (qui utilise actuellement la version bêta 4), je vois que lorsque vous utilisez les helpers form_tag
ou, form_for
il y a un champ caché nommé _snowman
avec la valeur de ☃ ( Unicode \ x9731) qui apparaît.
Alors, à quoi ça sert?
ruby-on-rails
forms
unicode
Peter Mortensen
la source
la source
Réponses:
Ce paramètre a été ajouté aux formulaires afin de forcer Internet Explorer (5, 6, 7 et 8) à encoder ses paramètres en unicode.
Plus précisément, ce bogue peut être déclenché si l'utilisateur bascule l'encodage du navigateur sur Latin-1. Pour comprendre pourquoi un utilisateur déciderait de faire quelque chose d'apparemment si fou, consultez cette recherche Google . Une fois que l'utilisateur a mis le site Web en mode Latin-1, s'il utilise des caractères pouvant être compris à la fois comme Latin-1 et Unicode (par exemple, é ou ç, communs dans les noms), Internet Explorer les encodera en latin -1.
Cela signifie que si un utilisateur recherche "Ché Guevara", il arrivera de manière incorrecte côté serveur. Dans Ruby 1.9, cela entraînera une erreur de codage lorsque le texte pénètre inévitablement dans le moteur d'expressions régulières. Dans Ruby 1.8, cela entraînera des résultats cassés pour l'utilisateur.
En créant un paramètre qui ne peut être compris par IE que comme un caractère unicode, nous forçons IE à regarder l'attribut accept-charset, qui lui dit ensuite d'encoder tous les caractères en UTF-8, même ceux qui peuvent être encodés en latin-1.
Gardez à l'esprit que dans Ruby 1.8, il est extrêmement simple d'obtenir des données Latin-1 dans votre base de données UTF-8 (puisque rien dans toute la pile ne vérifie que les octets que l'utilisateur a envoyés à tout moment sont des caractères UTF-8 valides). En conséquence, il est extrêmement courant que les applications Ruby (et les applications PHP, etc. etc.) présentent ce bogue face à l'utilisateur, et donc extrêmement courant pour les utilisateurs d'essayer de changer l'encodage comme mesure palliative.
Cela dit, lorsque j'ai écrit ce patch, je ne savais pas que le nom du paramètre apparaîtrait un jour dans un endroit face à l'utilisateur (c'est le cas avec les formulaires qui utilisent l'action GET, tels que les formulaires de recherche). Comme c'est le cas, nous renommerons ce paramètre en
_e
et utiliserons un caractère unicode plus inoffensif.la source
Ceci est là pour prendre en charge Internet Explorer 5 et l'encourager à utiliser UTF-8 pour ses formulaires.
Le message de validation vu ici le détaille comme suit:
En bref, vous pouvez ignorer ce paramètre en toute sécurité.
Pourtant, je ne sais pas pourquoi nous prenons en charge les anciennes technologies comme Internet Explorer 5. Cela semble être une décision très non Ruby on Rails si vous me demandez.
la source