En Ruby on Rails 3 (actualmente usando Beta 4), veo que cuando uso los form_tag
o form_for
helpers hay un campo oculto llamado _snowman
con el valor de ☃ ( Unicode \ x9731).
Entonces, ¿para qué sirve esto?
En Ruby on Rails 3 (actualmente usando Beta 4), veo que cuando uso los form_tag
o form_for
helpers hay un campo oculto llamado _snowman
con el valor de ☃ ( Unicode \ x9731).
Entonces, ¿para qué sirve esto?
Respuestas:
Este parámetro se agregó a los formularios para obligar a Internet Explorer (5, 6, 7 y 8) a codificar sus parámetros como unicode.
Específicamente, este error se puede activar si el usuario cambia la codificación del navegador a Latin-1. Para comprender por qué un usuario decidiría hacer algo aparentemente tan loco, consulte esta búsqueda de Google . Una vez que el usuario ha puesto el sitio web en modo Latin-1, si utiliza caracteres que se pueden entender como Latin-1 y Unicode (por ejemplo, é o ç, comunes en los nombres), Internet Explorer los codificará en latín -1.
Esto significa que si un usuario busca "Ché Guevara", aparecerá incorrectamente en el lado del servidor. En Ruby 1.9, esto dará como resultado un error de codificación cuando el texto inevitablemente llegue al motor de expresiones regulares. En Ruby 1.8, dará como resultado resultados rotos para el usuario.
Al crear un parámetro que solo IE puede entender como un carácter unicode, estamos obligando a IE a mirar el atributo accept-charset, que luego le dice que codifique todos los caracteres como UTF-8, incluso los que pueden codificarse en latín-1.
Tenga en cuenta que en Ruby 1.8, es extremadamente trivial obtener datos Latin-1 en su base de datos UTF-8 (ya que nada en la pila completa verifica que los bytes que el usuario envió en cualquier momento sean caracteres UTF-8 válidos). Como resultado, es extremadamente común que las aplicaciones de Ruby (y aplicaciones PHP, etc., etc.) exhiban este error orientado al usuario y, por lo tanto, es extremadamente común que los usuarios intenten cambiar la codificación como medida paliativa.
Dicho todo esto, cuando escribí este parche, no me di cuenta de que el nombre del parámetro aparecería alguna vez en un lugar orientado al usuario (lo hace con formularios que usan la acción GET, como los formularios de búsqueda). Como lo hace, cambiaremos el nombre de este parámetro _e
y usaremos un carácter unicode de aspecto más inocuo.
Esto está aquí para admitir Internet Explorer 5 y alentarlo a usar UTF-8 para sus formularios.
El mensaje de confirmación visto aquí lo detalla de la siguiente manera:
Solucione varios problemas de codificación web conocidos:
- Especifique accept-charset en todos los formularios. Todos los navegadores recientes, así como IE5 +, utilizarán la codificación especificada para los parámetros del formulario.
- Desafortunadamente, IE5 + no verá el conjunto de caracteres de aceptación a menos que al menos un carácter en los valores del formulario no esté en el conjunto de caracteres de la página. Dado que el usuario puede anular el
juego de caracteres predeterminado (que Rails establece en UTF-8), proporcionamos una entrada oculta que contiene un carácter unicode, lo que obliga a IE a mirar el juego de caracteres de aceptación.- Ahora que la gran mayoría de la entrada web es UTF-8, establecemos los parámetros de entrada en UTF-8. Esto eliminará muchos casos de codificaciones incompatibles entre ASCII-8BIT y
UTF-8.- Puede ignorar con seguridad los parámetros [: _ muñeco de nieve]
En resumen, puede ignorar este parámetro de forma segura.
Aún así, no estoy seguro de por qué admitimos tecnologías antiguas como Internet Explorer 5. Parece que es una decisión muy diferente a Ruby on Rails si me preguntas.