Rails 3 UTF-8查询字符串显示在URL中?

时间:2010-11-05 08:49:42

标签: ruby-on-rails string url ruby-on-rails-3

我的主页上有一个搜索查询表单(/)

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

<% end %>

当我提交此搜索表单时,我想结束(/ search?query = foo)。但是,现在我得到/搜索?utf8 =%E2%9C%93&amp; query = foo。那个utf8参数在那里做什么?我怎么能摆脱它?

感谢。

4 个答案:

答案 0 :(得分:46)

utf8参数(以前称为snowman)是针对Internet Explorer错误的Rails 3解决方法。

简短的回答是Internet Explorer忽略POST数据UTF8编码,除非POST数据中包含至少一个UTF8字符。出于这个原因,Rails在表单中注入一个UTF8字符,迫使IE将所有内容视为UTF8编码。

答案 1 :(得分:31)

此参数是rails 3的新功能。

以前是雪人。

它帮助IE真正使用utf-8。

避免使用form_tag,它可以工作:

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

答案 2 :(得分:13)

form_tag in Rails 4.2(可能更早)有一个:enforce_utf8选项;

  

如果设置为false,则不输出名为utf8的隐藏输入。

答案 3 :(得分:2)

我认为每个人都很好地解释了它存在的原因,但我觉得这个问题没有得到解答,那就是:

  

我怎样摆脱它?

所以说的一切都是正确的,你确实需要它来帮助“IE”但是它出现在你的地址栏中的原因是因为你正在做“GET”而不是“POST”。把它作为一个帖子它已经消失了,但是你也没有遵循惯例。

归结为哪些是你最容易接受的。