2010-11-05 11 views
33

Mam formularza wyszukiwania zapytań na stronie głównej (/)Szyny 3 Ciąg znaków zapytania UTF-8 pojawia się w adresie URL?

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

<% end %> 

Kiedy przesłać ten formularz wyszukiwarki, chcę skończyć w (/ wyszukiwania? Query = foo). Jednak teraz otrzymuję/szukam? Utf8 =% E2% 9C% 93 & query = foo. Co tam robi ten parametr utf8? Jak mogę się go pozbyć?

Dzięki.

Odpowiedz

46

Parametr utf8 (dawniej znany jako snowman) jest Rails 3 obejście dla błędem Internet Explorer.

Krótka odpowiedź polega na tym, że Internet Explorer ignoruje kodowanie danych UTF 8 POST, chyba że co najmniej jeden znak UTF8 jest zawarty w danych POST. Z tego powodu Rails wstrzykuje postać UTF8 w formularzu, aby zmusić IE do traktowania wszystkiego jako zakodowanego w UTF8.

31

Ten parametr jest nowa funkcja szyn 3.

to było wcześniej bałwana.

To pomaga IE naprawdę używać utf-8.

Unikaj używania form_tag i to działa:

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

To, czego szukałem - moje formularze wyszukiwania nie są utrwalane, więc chcę otrzymać żądanie GET bez "tick". Snowman mógł zostać, ale już go nie ma :( – Phantomwhale

+0

+1, aby uniknąć podania paramu UTF8 przy zgłoszeniu.W moim przypadku nie wierzę, że kodowanie UTF8 było ważne –

+1

Zobacz moją odpowiedź na moje lata do późna re. 'Form_tag '' s ​​': enforce_utf8' opcja. –

11

form_tag in Rails 4.2 (i prawdopodobnie wcześniej) ma opcję :enforce_utf8;

Jeśli ustawione na wartość false, ukryte dane wejściowe o nazwie utf8 nie są wyprowadzane.

2

myślę, że wszyscy świetnie się spisali wyjaśniając dlaczego istnieje, ale czuję się jak na pytanie nie odpowiedział, co było:

Jak mogę pozbyć się tego?

Więc wszystko powiedział jest poprawna, trzeba zrobić to obecne, aby pomóc „czyli” Ale powód, dlaczego pojawia się w pasku adresu jest dlatego, że robi „GET”, w przeciwieństwie do „post” . Zrób to postem i już go nie ma, ale też nie przestrzegasz konwencji.

Sprowadza się do tego, które z nich są najbardziej do przyjęcia.

Powiązane problemy