2010-11-05 5 views
33

J'ai un formulaire de requête de recherche sur ma page d'accueil (/)Rails 3 Chaîne de requête UTF-8 affichée dans l'URL?

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

<% end %> 

Quand je soumets ce formulaire de recherche, je veux finir à (/ search? Query = toto). Cependant, en ce moment j'obtiens/search? Utf8 =% E2% 9C% 93 & query = foo. Qu'est-ce que ce paramètre utf8 fait là? Comment puis-je m'en débarrasser?

Merci.

Répondre

46

Le paramètre UTF8 (anciennement connu sous le nom snowman) est un Rails 3 solution de contournement pour un bogue Internet Explorer. La réponse courte est qu'Internet Explorer ignore le codage 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.

31

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

Il était auparavant le bonhomme de neige.

Il aide IE à utiliser vraiment utf-8.

Évitez d'utiliser form_tag et il fonctionne:

<form action="<%= search_path %>" method="get" > 
    <%= text_field_tag 'query' %> 
    <%= submit_tag "Search", :name => nil%> 
</form> 
+0

Juste ce que je recherchais - mes formulaires de recherche ne sont pas persistants, donc je veux juste une requête GET sans "tick". Bonhomme de neige a pu rester, mais il est parti maintenant: ( – Phantomwhale

+0

+1 pour éviter que le paramètre UTF8 ne soit transmis.) Dans mon cas, je ne pense pas que l'UTF8 ait été important –

+1

Voir ma réponse de fin d'année re 'form_tag '' s ​​': enforce_utf8' option. –

11

form_tag in Rails 4.2 (et probablement plus tôt) a une option :enforce_utf8;

Si la valeur est false, une entrée cachée portant le nom utf8 n'est pas sortie.

2

Je pense que tout le monde a fait un excellent travail pour expliquer pourquoi il existe, mais je me sens comme la question n'a pas été répondu, ce qui était:

Comment puis-je me débarrasser?

Donc, tout ce que dit est correct, vous en avez besoin présent pour aider à « IE », mais la raison pour laquelle il apparaît dans la barre d'adresse est parce que vous faites un « GET », par opposition à un « POST » . Faites-en un post et c'est parti, mais vous ne suivez pas non plus la convention.

Il revient à laquelle de ces derniers sont les plus acceptables pour vous.