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?
ruby-on-rails
forms
unicode
Peter Mortensen
fonte
fonte
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.fonte
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:
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.
fonte