Rails: как избежать амперсанда в формировании URL - PullRequest
5 голосов
/ 25 января 2011

У меня есть помощник link_to, подобный следующему:

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

Он обрамляет URL http://localhost:3000/example?title=example&amp:text

В примере контроллера он вызывает метод index, но params[:title] возвращает значение example&amp:text.

Я хочу иметь значение типа «пример и текст».Поэтому я попробовал CGI::escape() и CGI::escapeHTML(), но без удачи.

Ответы [ 2 ]

12 голосов
/ 25 января 2011

URL должен быть экранирован с помощью CGI.escape:

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

Это должно сгенерировать что-то вроде:

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

Затем, где бы вы ни захотели использовать это, вы можете снова удалить его, чтобы вернуть его в нормальное состояние:

CGI.unescape params[:title] # => "example & text"
2 голосов
/ 08 ноября 2013

Для этого есть хороший метод rails raw .

Вы можете использовать таким образом:

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

Еще один этот & не должен использоваться в URL, поскольку он используется как разделитель параметров.

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