Rails 3 UTF-8 строка запроса отображается в URL? - PullRequest
33 голосов
/ 05 ноября 2010

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

<% 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 делает там?Как мне от этого избавиться?

Спасибо.

Ответы [ 4 ]

46 голосов
/ 05 ноября 2010

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

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

31 голосов
/ 05 ноября 2010

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

Ранее это был снеговик.

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

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

<form action="<%= search_path %>" method="get" >
  <%= text_field_tag 'query' %>
  <%= submit_tag "Search", :name => nil%>
</form> 
13 голосов
/ 28 января 2015

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

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

2 голосов
/ 10 ноября 2015

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

Как от этого избавиться?

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

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

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...