In Ruby on Rails 3 (attualmente usando Beta 4), vedo che quando si usano gli helper form_tag
o form_for
c'è un campo nascosto chiamato _snowman
con il valore di ☃ ( Unicode \ x9731) che appare.
Quindi, a cosa serve?
In Ruby on Rails 3 (attualmente usando Beta 4), vedo che quando si usano gli helper form_tag
o form_for
c'è un campo nascosto chiamato _snowman
con il valore di ☃ ( Unicode \ x9731) che appare.
Quindi, a cosa serve?
Risposte:
Questo parametro è stato aggiunto ai moduli per forzare Internet Explorer (5, 6, 7 e 8) a codificare i suoi parametri come Unicode.
In particolare, questo errore può essere attivato se l'utente commuta la codifica del browser su Latin-1. Per capire perché un utente dovrebbe decidere di fare qualcosa di apparentemente così folle, dai un'occhiata a questa ricerca su Google . Una volta che l'utente ha messo il sito in modalità Latin-1, se usano caratteri che possono essere compresi sia in Latin-1 che in Unicode (ad esempio, é o ç, comuni nei nomi), Internet Explorer li codificherà in latino -1.
Ciò significa che se un utente cerca "Ché Guevara", verrà visualizzato in modo errato sul lato server. In Ruby 1.9, ciò comporterà un errore di codifica quando il testo inevitabilmente si farà strada nel motore delle espressioni regolari. In Ruby 1.8, si otterranno risultati interrotti per l'utente.
Creando un parametro che può essere compreso da IE solo come carattere unicode, stiamo forzando IE a guardare l'attributo accept-charset, che poi gli dice di codificare tutti i caratteri come UTF-8, anche quelli che possono essere codificati in latino-1.
Tieni presente che in Ruby 1.8 è estremamente banale ottenere i dati Latin-1 nel tuo database UTF-8 (poiché nulla nell'intero stack controlla che i byte inviati dall'utente in qualsiasi punto siano caratteri UTF-8 validi). Di conseguenza, è estremamente comune per le applicazioni Ruby (e applicazioni PHP, ecc. Ecc.) Esibire questo bug rivolto all'utente, e quindi estremamente comune per gli utenti provare a cambiare la codifica come misura palliativa.
Detto questo, quando ho scritto questa patch, non mi rendevo conto che il nome del parametro sarebbe mai comparso in un luogo rivolto all'utente (lo fa con i moduli che usano l'azione GET, come i moduli di ricerca). Dal momento che lo faremo, rinomineremo questo parametro _e
e useremo un carattere unicode dall'aspetto più innocuo.
Questo è qui per supportare Internet Explorer 5 e incoraggiarlo a utilizzare UTF-8 per i suoi moduli.
Il messaggio di commit visualizzato qui lo dettaglia come segue:
Risolvi diversi problemi di codifica Web noti:
- Specificare accept-charset su tutti i moduli. Tutti i browser recenti, così come IE5 +, utilizzeranno la codifica specificata per i parametri del modulo
- Sfortunatamente, IE5 + non prenderà in considerazione accetta-charset a meno che almeno un carattere nei valori del modulo non sia nel set di caratteri della pagina. Poiché l'utente può ignorare il
set di caratteri predefinito (che Rails imposta su UTF-8), forniamo un input nascosto contenente un carattere unicode, costringendo IE a guardare il set di accettazione.- Ora che la maggior parte dell'input Web è UTF-8, impostiamo i parametri in entrata su UTF-8. Ciò eliminerà molti casi di codifiche incompatibili tra ASCII-8BIT e
UTF-8.- Puoi tranquillamente ignorare i parametri [: _ snowman]
In breve, puoi tranquillamente ignorare questo parametro.
Tuttavia, non sono sicuro del perché stiamo supportando le vecchie tecnologie come Internet Explorer 5. Sembra una decisione molto diversa da Ruby on Rails se me lo chiedi.