¿Para qué sirve el snowman param en Ruby on Rails 3 forms?


En Ruby on Rails 3 (actualmente usando Beta 4), veo que al usar los ayudantes form_tag o form_for hay un campo oculto llamado _snowman con el valor de Unic (Unicode \x9731) apareciendo.

Entonces, ¿para qué es esto?

Author: Peter Mortensen, 2010-07-11

2 answers

Este parámetro se agregó a los formularios para forzar Internet Explorer (5, 6, 7 y 8) para 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 entender por qué un usuario decidiría hacer algo aparentemente tan loco, echa un vistazo 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 (para ej., é o ç, comunes en los nombres), Internet Explorer los codificará en latín-1.

Esto significa que si un usuario busca "Ché Guevara", llegará incorrectamente en el lado del servidor. En Ruby 1.9, esto resultará en un error de codificación cuando el texto inevitablemente se abra paso en el motor de expresiones regulares. En Ruby 1.8, resultará en resultados rotos para el usuario.

Al crear un parámetro que solo puede ser entendido por IE como un carácter unicode, estamos forzando IE para ver el atributo accept-charset, que luego le dice que codifique todos los caracteres como UTF-8, incluso los que se pueden codificar en latín-1.

Tenga en cuenta que en Ruby 1.8, es extremadamente trivial obtener datos Latinos-1 en su base de datos UTF-8 (ya que nada en toda la pila comprueba que los bytes que el usuario envió en cualquier momento sean caracteres UTF-8 válidos). Como resultado, es extremadamente común para aplicaciones Ruby (y aplicaciones PHP, etc. sucesivamente.) para exhibir esto error de cara al usuario, y por lo tanto extremadamente común para los usuarios intentar cambiar la codificación como una medida paliativa.

Dicho esto, cuando escribí este parche, no me di cuenta de que el nombre del parámetro nunca aparecería en un lugar orientado al usuario (lo hace con los formularios que usan la acción GET, como los formularios de búsqueda). Como lo hace, cambiaremos el nombre de este parámetro a _e, y usaremos un carácter unicode de aspecto más inocuo.

 297
Author: Yehuda Katz,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-03-23 04:09:17

Esto está aquí para apoyar Internet Explorer 5 y animarlo a usar UTF-8 para sus formas.

El mensaje de confirmación visto aquí lo detalla de la siguiente manera:

Se corrigen varios problemas de codificación web conocidos:

  • Especifique accept-charset en todos los formularios. Todos los navegadores recientes, así como IE5+, utilizará la codificación especificada para los parámetros de forma
  • Desafortunadamente, IE5 + no mirará accept-charset a menos que al menos uno personaje en los valores del formulario no son en el charset de la página. Desde el el usuario puede anular el valor predeterminado
    charset (que Rails establece en UTF-8), proporcionamos una entrada oculta que contiene un carácter unicode, forzando a IE a mira el conjunto de caracteres aceptar.
  • Ahora que la gran mayoría de la entrada web es UTF-8, configuramos la entrada parámetros a UTF-8. Esta voluntad eliminar muchos casos de incompatibilidad codificaciones entre ASCII-8BIT y
    UTF-8.
  • Puede ignorar con seguridad params [: _snowman]

En resumen, puede ignorar este parámetro de forma segura.

Aún así, no estoy seguro de por qué estamos apoyando tecnologías antiguas como Internet Explorer 5. Parece una decisión muy no-Ruby on Rails si me preguntas.

 55
Author: Matthew Savage,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/ajaxhispano.com/template/agent.layouts/content.php on line 61
2013-01-01 12:28:11