Si je suis dans une vue RHTML dans Rails, il est facile d'échapper quelque chose:
<a href="/redirect?href=<%=u target %>">Foo</a>
Comment faire cela dans une chaîne? Je voudrais faire quelque chose comme ça:
<% redirect_href = "/redirect?#{url_escape target}&foo=bar&baz=some_other_stuff" -%>
<a href="<%= redirect_href =>">Foo</a>
Cela doit être trivial, non?
CGI.escape le fera:
<% redirect_href = "/redirect?#{CGI.escape target}&foo=bar&baz=some_other_stuff" -%>
<a href="<%= redirect_href =>">Foo</a>
Rails (activesupport
) définit Hash#to_param
(aliasé à Hash#to_query
):
{foo: 'asd asdf', bar: '"<#$dfs'}.to_param
# => "bar=%22%3C%23%24dfs&foo=asd+asdf"
Il convient de noter qu'il trie les clés de requête (pour la mise en cache HTTP).
Hash#to_param
accepte également le paramètre d'espace de noms facultatif:
{name: 'David', nationality: 'Danish'}.to_param('user')
# => "user[name]=David&user[nationality]=Danish"
http://api.rubyonrails.org/classes/Hash.html#method-i-to_param
peut être utilisé de n'importe où, une partie de Ruby std lib.
Utilisez soit CGI::escape
ou ERB::Util.url_encode
mais non URI.encode
.
URI.escape
a été déconseillé vers Ruby 1.9.2: Quelle est la différence entre URI.escape et CGI.escape?