web-dev-qa-db-fra.com

Comment puis-je échapper une chaîne dans Rails?

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}&amp;foo=bar&amp;baz=some_other_stuff" -%>
<a href="<%= redirect_href =>">Foo</a>

Cela doit être trivial, non?

54
Josh Glover

CGI.escape le fera:

<% redirect_href = "/redirect?#{CGI.escape target}&amp;foo=bar&amp;baz=some_other_stuff" -%>
<a href="<%= redirect_href =>">Foo</a>
73
Josh Glover

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

65
Ernest

ERB :: Util.url_encode

peut être utilisé de n'importe où, une partie de Ruby std lib.

28
Viktor Trón

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?

8
thekingoftruth