2011-01-25 15 views
5

Mam link_to pomocnika jak następuje:Szyny: Jak uciec ampersanda w tworzeniu URL

<%= link_to "example & text", url_for(:controller =>'example', :title=>"example & text") %> 

To ramki URL http://localhost:3000/example?title=example&amp:text

w kontrolerze próbki wywołuje index metoda ale params[:title] powraca wartość example&amp:text.

Chcę mieć wartość taką jak "przykład & tekst". Próbowałem więc CGI::escape() i CGI::escapeHTML(), ale bez powodzenia.

Odpowiedz

12

Adres URL musi być ocalałem przy użyciu CGI.escape:

link_to "example & text", :controller => "example", :title => CGI.escape("example & text") 

To powinno generować coś takiego:

<a href="/example?title=example+%26+text">example & text</a> 

Następnie, gdziekolwiek jesteś chcąc to wykorzystać, można go ponownie do przywróceniu znaczenia przywrócić go do normalnego stanu:

CGI.unescape params[:title] # => "example & text" 
+0

Próbowałem twoich sugestii, ale wciąż dostaję (amp;) dołączony po parametrach CGI.unescape [: title]. zwraca przykładowy tekst: &. – palani

+0

Ponadto zawsze możesz użyć 'CGI.unescapeHTML' na górze' CGI.unescape', ale to dość nieprzyjemne. – idlefingers

+0

Pracuję z Railsami 2.3.10 ... to jest kwestia łamania serca tutaj – palani

2

W związku z tym istnieje fajna metoda szynowa o nazwie raw.

można wykorzystywać w ten sposób:

<%= link_to raw("example & text"), url_for(:controller =>'example', :title=>raw("example & text")) %> 

Jeszcze tego & nie powinien być stosowany w URL jak jest on stosowany jako separator params.