从Rails 3中删除"utf8 =✓"表单提交

gra*_*tur 66 ruby-on-rails utf-8

我在Rails 3应用程序中有一个简单的搜索表单:

<%= form_tag search_path, :method => "get" do %>
  <%= text_field_tag :q, params[:q] %>
  <%= submit_tag "search", :name => nil %>
<% end %>
Run Code Online (Sandbox Code Playgroud)

当用户点击提交按钮,它们会采取的网址:http://myapp.com/search?utf8=%E2%9C%93&q=foobar (其中%E2%9C%93被显示为复选标记:✓).

我没有对utf8参数做任何事情,所以我想通过完全删除它来保持URL清洁.也就是说,我希望用户可以访问以下网址:http://myapp.com/search?q = foob​​ar.

我该怎么做呢?

And*_*rew 39

一旦你理解了Rails UTF-8 param的目的,并且出于某种原因你仍然需要删除它,解决方案比你想象的更容易......只是不要使用form_tag帮助器:

<form action="<%= search_path %>" method="get">
  <%= text_field_tag :q, params[:q] %>
  <%= submit_tag "search", :name => nil %>
</form>
Run Code Online (Sandbox Code Playgroud)


Pau*_*ley 37

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

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

(与/sf/answers/1974108041/相同)


小智 25

即使你没有对参数做任何事情,Rails也是.这是纠正IE的参数编码中的一些问题.Yehuda在这里有更多信息:

Ruby on Rails 3表单中的_snowman参数是什么用的?


Jar*_*arl 10

有一个gem(utf8_enforcer_workaround)用于仅为非标准符合浏览器(或为此目的的任何其他逻辑)应用utf8参数.如果您不想使用IE解决方法来打扰表现良好的用户,这很方便.