如何在URL中转义string?

如果我在Rails的RHTML视图中,很容易URL转义的东西:

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

我如何在一个string中做到这一点? 我想要做这样的事情:

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

这一定是微不足道的,对吧?

CGI.escape将做到这一点:

 <% redirect_href = "/redirect?#{CGI.escape target}&amp;foo=bar&amp;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" 

值得注意的是,它sorting查询键(用于HTTPcaching)。

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

ERB :: Util.url_encode

可以从任何地方使用,ruby std lib的一部分。

使用CGI::escapeERB::Util.url_encode但不要使用URI.encode

URI.escape已经被弃用,大约是Ruby 1.9.2: URI.escape和CGI.escape有什么不同?