Qual è il parametro _snowman nei moduli di Ruby on Rails 3?

In Ruby on Rails 3 (attualmente in uso in Beta 4), vedo che quando si utilizza form_tag o form_for esiste un campo nascosto chiamato _snowman con il valore di ☃ ( Unicode \ x9731) visualizzato.

Quindi, a cosa serve?

Questo parametro è stato aggiunto ai moduli per forzare Internet Explorer (5, 6, 7 e 8) per codificare i suoi parametri come unicode.

In particolare, questo errore può essere triggersto se l’utente cambia la codifica del browser in Latin-1. Per capire perché un utente decida di fare qualcosa apparentemente così pazzo, dai un’occhiata a questa ricerca su google . Una volta che l’utente ha inserito il sito Web in modalità Latin-1, se utilizza caratteri che possono essere compresi sia Latin-1 che Unicode (ad esempio, é o ç, comune nei nomi), Internet Explorer li codificherà in latino -1.

Ciò significa che se un utente cerca “Ché Guevara”, verrà erroneamente visualizzato sul lato server. In Ruby 1.9, questo si tradurrà in un errore di codifica quando il testo entra inevitabilmente nel motore delle espressioni regolari. In Ruby 1.8, si otterranno risultati non funzionanti per l’utente.

Creando un parametro che può essere compreso solo da IE come carattere unicode, stiamo costringendo IE a esaminare l’attributo accept-charset, che poi dice di codificare tutti i caratteri come UTF-8, anche quelli che possono essere codificati in latino-1.

Tenere presente che in Ruby 1.8 è estremamente semplice ottenere dati Latin-1 nel proprio database UTF-8 (poiché nulla nell’intero stack verifica che i byte inviati dall’utente in qualsiasi momento siano caratteri UTF-8 validi). Di conseguenza, è estremamente comune per le applicazioni di Ruby (e applicazioni PHP, ecc. Ecc.) Mostrare questo bug rivolto all’utente, e quindi estremamente comune per gli utenti provare a modificare la codifica come misura palliativa.

Detto questo, quando ho scritto questa patch, non mi ero reso conto che il nome del parametro sarebbe mai apparso in un posto rivolto all’utente (lo fa con i moduli che usano l’azione GET, come i moduli di ricerca). Dato che lo fa, rinomineremo questo parametro in _e e useremo un carattere unicode dall’aspetto innocuo.

Questo è qui per supportare Internet Explorer 5 e incoraggiarlo a usare UTF-8 per i suoi moduli.

Il messaggio di commit visto qui lo descrive come segue:

Correggere diversi problemi noti di codifica Web:

  • Specifica accept-charset su tutti i moduli. Tutti i browser recenti, nonché IE5 +, utilizzeranno la codifica specificata per i parametri del modulo
  • Sfortunatamente, IE5 + non considererà accept-charset a meno che almeno un carattere nei valori del form non sia nel set di caratteri della pagina. Poiché l’utente può sovrascrivere il valore predefinito
    charset (che Rails imposta su UTF-8), forniamo un input nascosto contenente un carattere unicode, costringendo IE a guardare il set di caratteri accept.
  • Ora che la maggior parte degli input Web è UTF-8, impostiamo i parametri in entrata su UTF-8. Questo eliminerà molti casi di codifiche incompatibili tra ASCII-8BIT e
    UTF-8.
  • Puoi tranquillamente ignorare i parametri [: _ pupazzo di neve]

In breve, puoi tranquillamente ignorare questo parametro.

Tuttavia, non sono sicuro del motivo per cui stiamo supportando vecchie tecnologie come Internet Explorer 5. Mi sembra una decisione molto non-Ruby on Rails se me lo chiedi.