33 votes

Rails 3 chaîne de requête UTF-8 apparaissant dans l'URL?

J'ai un formulaire de requête de recherche sur ma page d'accueil (/)

<% form_tag(search_path, :method => :get) do %>
  <%= text_field_tag 'query' %>
  <%= submit_tag "Rechercher", :name => nil%>

<% end %>

Quand je soumets ce formulaire de recherche, je veux arriver sur (/search?query=foo). Cependant, pour l'instant j'obtiens /search?utf8=%E2%9C%93&query=foo. À quoi sert ce paramètre utf8 là ? Comment puis-je m'en débarrasser ?

Merci.

46voto

Simone Carletti Points 77653

Le paramètre utf8 (anciennement connu sous le nom de bonhomme de neige) est un contournement de bug de Rails 3 pour Internet Explorer.

En bref, Internet Explorer ignore l'encodage UTF8 des données POST sauf si au moins un caractère UTF8 est inclus dans les données POST. Pour cette raison, Rails injecte un caractère UTF8 dans le formulaire pour forcer IE à traiter tout comme encodé en UTF8.

31voto

shingara Points 26980

Ce paramètre est une nouvelle fonctionnalité de Rails 3.

C'était auparavant le bonhomme de neige.

Cela aide Internet Explorer à vraiment utiliser utf-8.

Évitez d'utiliser form_tag et ça marche:

  <%= text_field_tag 'query' %>
  <%= submit_tag "Rechercher", :name => nil%>

13voto

Paul Annesley Points 1795

form_tag in Rails 4.2 (et probablement avant) a une option :enforce_utf8;

Si défini sur false, une entrée cachée avec le nom utf8 n'est pas produite.

2voto

Mitchell Geere Points 21

Je pense que tout le monde a fait du bon travail en expliquant pourquoi cela existe, mais j'ai l'impression que la question n'a pas été répondue, qui était :

Comment puis-je m'en débarrasser ?

Donc tout ce qui a été dit est correct, vous en avez besoin pour aider avec "IE" mais la raison pour laquelle il apparaît dans votre barre d'adresse est parce que vous effectuez un "GET" au lieu d'un "POST". Faites-en un "post" et il disparaît, mais alors vous ne suivez également pas la convention.

Cela revient à déterminer lequel de ces éléments est le plus acceptable pour vous.

(Note: Translation may vary depending on the context of the content)

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X