A quoi sert le paramètre _snowman dans les formulaires Ruby on Rails 3?

Dans Ruby on Rails 3 (utilisant actuellement la version bêta 4), je vois que lorsque vous utilisez les form_tag ou form_for il existe un champ masqué nommé _snowman avec la valeur ☃ ( Unicode \ x9731).

Alors, c’est quoi ça?

    Ce paramètre a été ajouté aux formulaires afin de forcer Internet Explorer (5, 6, 7 et 8) à encoder ses parameters en unicode.

    Plus précisément, ce bogue peut être déclenché si l’utilisateur bascule le codage du navigateur sur Latin-1. Pour comprendre pourquoi un utilisateur décide de faire quelque chose qui semble 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 comme Latin-1 et Unicode (par exemple, é ou ç, communs aux noms), Internet Explorer les encodera en latin -1.

    Cela signifie que si un utilisateur recherche “Ché Guevara”, il ne le fera pas correctement côté serveur. Dans Ruby 1.9, cela entraînera une erreur de codage lorsque le texte sera inévitablement intégré au moteur d’expression régulière. Dans Ruby 1.8, il en résultera des résultats erronés pour l’utilisateur.

    En créant un paramètre qui ne peut être compris que par IE en tant que caractère Unicode, nous obligons IE à examiner l’atsortingbut 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 sortingvial d’obtenir des données Latin-1 dans votre firebase database UTF-8 (puisque rien dans la stack entière ne vérifie que les octets envoyés par l’utilisateur 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, et par conséquent, les utilisateurs essaient extrêmement souvent de modifier l’encodage en tant que mesure palliative.

    Cela dit, lorsque j’ai écrit ce correctif, je ne me suis pas rendu compte que le nom du paramètre apparaitrait toujours dans un environnement utilisateur (il en va de même pour les formulaires qui utilisent l’action GET, tels que les formulaires de recherche). Comme il le fait, nous allons renommer ce paramètre en _e et utiliser un caractère unicode plus anodin.

    Ceci est ici pour supporter Internet Explorer 5 et l’encourager à utiliser UTF-8 pour ses formulaires.

    Le message de validation vu ici le détaille comme suit:

    Corrige plusieurs problèmes d’encodage Web connus:

    • Spécifiez accept-charset sur tous les formulaires. Tous les navigateurs récents, ainsi que IE5 +, utiliseront l’encodage spécifié pour les parameters de formulaire.
    • Malheureusement, IE5 + ne verra pas accept-charset à moins qu’au moins un caractère des valeurs du formulaire ne soit pas dans le jeu de caractères de la page. Comme l’utilisateur peut remplacer le paramètre par défaut
      charset (dont Rails définit UTF-8), nous fournissons une entrée cachée contenant un caractère unicode, forçant IE à examiner le charset-accept.
    • Maintenant que la grande majorité des entrées Web est UTF-8, nous définissons les parameters entrants sur UTF-8. Cela éliminera de nombreux cas de codages incompatibles entre ASCII-8BIT et
      UTF-8.
    • Vous pouvez ignorer en toute sécurité params [: _ bonhomme de neige]

    En bref, vous pouvez ignorer ce paramètre en toute sécurité.

    Pourtant, je ne suis pas sûr de savoir pourquoi nous supportons les anciennes technologies comme Internet Explorer 5. Cela me semble être une décision très différente de Ruby on Rails si vous me le demandez.