No Ruby on Rails 3 (atualmente usando o Beta 4), vejo que ao usar o form_tag
ou form_for
helpers, existe um campo oculto nomeado _snowman
com o valor de ☃ ( Unicode \ x9731) aparecendo.
Então, para que serve isso?
No Ruby on Rails 3 (atualmente usando o Beta 4), vejo que ao usar o form_tag
ou form_for
helpers, existe um campo oculto nomeado _snowman
com o valor de ☃ ( Unicode \ x9731) aparecendo.
Então, para que serve isso?
Respostas:
Este parâmetro foi adicionado aos formulários para forçar o Internet Explorer (5, 6, 7 e 8) a codificar seus parâmetros como unicode.
Especificamente, esse bug pode ser acionado se o usuário alternar a codificação do navegador para Latin-1. Para entender por que um usuário decidiria fazer algo aparentemente tão louco, confira esta pesquisa no Google . Depois que o usuário colocar o site no modo Latin-1, se eles usarem caracteres que possam ser entendidos como Latin-1 e Unicode (por exemplo, é ou ç, comuns em nomes), o Internet Explorer os codificará em latim. -1.
Isso significa que, se um usuário pesquisar "Ché Guevara", ele será exibido incorretamente no servidor. No Ruby 1.9, isso resultará em um erro de codificação quando o texto inevitavelmente entrar no mecanismo de expressão regular. No Ruby 1.8, resultará em resultados quebrados para o usuário.
Ao criar um parâmetro que só pode ser entendido pelo IE como um caractere unicode, estamos forçando o IE a olhar para o atributo accept-charset, que então o instrui a codificar todos os caracteres como UTF-8, mesmo aqueles que podem ser codificados em latim-1.
Lembre-se de que, no Ruby 1.8, é extremamente trivial obter dados do Latin-1 no banco de dados UTF-8 (já que nada na pilha inteira verifica se os bytes que o usuário enviou a qualquer momento são caracteres UTF-8 válidos). Como resultado, é extremamente comum que aplicativos Ruby (e aplicativos PHP, etc.) exibam esse bug voltado para o usuário e, portanto, extremamente comum que os usuários tentem alterar a codificação como uma medida paliativa.
Tudo o que foi dito, quando escrevi esse patch, não percebi que o nome do parâmetro jamais apareceria em um local voltado para o usuário (isso ocorre com formulários que usam a ação GET, como os formulários de pesquisa). Como isso acontece, renomearemos esse parâmetro para _e
e usaremos um caractere unicode de aparência mais inócua.
Aqui está para oferecer suporte ao Internet Explorer 5 e incentivá-lo a usar UTF-8 para seus formulários.
A mensagem de confirmação vista aqui detalha da seguinte maneira:
Corrija vários problemas conhecidos de codificação da web:
- Especifique accept-charset em todos os formulários. Todos os navegadores recentes, assim como o IE5 +, usarão a codificação especificada para os parâmetros do formulário
- Infelizmente, o IE5 + não examinará o accept-charset, a menos que pelo menos um caractere nos valores do formulário não esteja no charset da página. Como o usuário pode substituir o conjunto de
caracteres padrão (que o Rails define como UTF-8), fornecemos uma entrada oculta contendo um caractere unicode, forçando o IE a examinar o conjunto de caracteres aceito.- Agora que a grande maioria das entradas da Web é UTF-8, definimos os parâmetros de entrada como UTF-8. Isso eliminará muitos casos de codificações incompatíveis entre ASCII-8BIT e
UTF-8.- Você pode ignorar com segurança os parâmetros [: _ boneco de neve]
Em resumo, você pode ignorar com segurança esse parâmetro.
Ainda assim, não sei por que estamos dando suporte a tecnologias antigas como o Internet Explorer 5. Parece uma decisão muito diferente do Ruby on Rails, se você me perguntar.