Как мне URL-экранировать строку в Rails? - PullRequest
53 голосов
/ 19 мая 2011

Если я нахожусь в RHTML-представлении в Rails, легко что-то избежать по URL-адресу:

<a href="/redirect?href=<%=u target %>">Foo</a>

Как мне сделать это в строке? Я хотел бы сделать что-то вроде этого:

<% redirect_href = "/redirect?#{url_escape target}&amp;foo=bar&amp;baz=some_other_stuff" -%>
<a href="<%= redirect_href =>">Foo</a>

Это должно быть тривиально, верно?

Ответы [ 4 ]

72 голосов
/ 19 мая 2011

CGI.escape сделает это:

<% redirect_href = "/redirect?#{CGI.escape target}&amp;foo=bar&amp;baz=some_other_stuff" -%>
<a href="<%= redirect_href =>">Foo</a>
64 голосов
/ 29 ноября 2012

Rails (activesupport) определяет Hash#to_param (с псевдонимом Hash#to_query):

 {foo: 'asd asdf', bar: '"<#$dfs'}.to_param
 # => "bar=%22%3C%23%24dfs&foo=asd+asdf"

Стоит отметить, что он сортирует ключи запросов (для кэширования HTTP).

Hash#to_param также принимает необязательный параметр пространства имен:

{name: 'David', nationality: 'Danish'}.to_param('user')
# => "user[name]=David&user[nationality]=Danish"

http://api.rubyonrails.org/classes/Hash.html#method-i-to_param

27 голосов
/ 09 февраля 2013

ERB :: Util.url_encode

можно использовать где угодно, часть ruby ​​std lib.

8 голосов
/ 28 сентября 2013

Используйте CGI::escape или ERB::Util.url_encode, но не URI.encode.

URI.escape устарела примерно в Ruby 1.9.2: В чем разница между URI.escape и CGI.escape?

...