Rails 3 Строка запроса UTF-8 отображается в URL?

У меня есть поисковый запрос на моей домашней странице (/)

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

<% end %>

Когда я отправлю эту форму поиска, я хочу закончить в (/search? query = foo). Однако сейчас я получаю /search? Utf8 =% E2% 9C% 93 & query = foo. Какой там параметр utf8? Как я могу избавиться от него?

Спасибо.

Ответ 1

Параметр utf8 (ранее известный как snowman) является обходным решением Rails 3 для ошибки Internet Explorer.

Короткий ответ заключается в том, что Internet Explorer игнорирует кодировку USTF данных POST, если в данные POST не включен хотя бы один UTF8 char. По этой причине Rails вводит символ UTF8 в форме, чтобы заставить IE обрабатывать все по мере кодирования UTF8.

Ответ 2

Этот параметр является новой функцией рельсов 3.

Это был ранее снеговик.

Это помогает IE действительно использовать utf-8.

Избегайте использования form_tag, и он работает:

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

Ответ 3

form_tag в Rails 4.2 (и, возможно, ранее) имеет параметр :enforce_utf8;

Если установлено значение false, скрытый ввод с именем utf8 не выводится.

Ответ 4

Я думаю, что все отлично поработали, объясняя, почему он существует, но я чувствую, что на вопрос не ответил, а именно:

Как я могу избавиться от него?

Итак, все сказанное правильно, вам нужно, чтобы он присутствовал, чтобы помочь с "IE", но причина, по которой он появляется в вашей адресной строке, заключается в том, что вы выполняете "GET", а не "POST". Сделать это сообщение, и оно исчезло, но тогда вы также не следуете конвенции.

Доходит до того, какое из них наиболее приемлемо для вас.