Ответ 1
CGI.escape сделает это:
<% redirect_href = "/redirect?#{CGI.escape target}&foo=bar&baz=some_other_stuff" -%>
<a href="<%= redirect_href =>">Foo</a>
Если я нахожусь в RHTML-представлении в Rails, легко спрятать URL-адрес:
<a href="/redirect?href=<%=u target %>">Foo</a>
Как это сделать в строке? Я хотел бы сделать что-то вроде этого:
<% redirect_href = "/redirect?#{url_escape target}&foo=bar&baz=some_other_stuff" -%>
<a href="<%= redirect_href =>">Foo</a>
Это должно быть тривиально, правильно?
CGI.escape сделает это:
<% redirect_href = "/redirect?#{CGI.escape target}&foo=bar&baz=some_other_stuff" -%>
<a href="<%= redirect_href =>">Foo</a>
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
может использоваться из любого места, часть ruby std lib.
Используйте либо CGI::escape
, либо ERB::Util.url_encode
, но не URI.encode
.
URI.escape
устарел около Ruby 1.9.2: В чем разница между URI.escape и CGI.escape?