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.