55 votes

Comment échapper à l'URL d'une chaîne de caractères dans Rails ?

Si je suis dans une vue RHTML dans Rails, il est facile d'échapper à une URL :

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

Comment puis-je faire cela dans une chaîne de caractères ? J'aimerais 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 ?

72voto

Josh Glover Points 4762

CGI.escape le fera :

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

65voto

Ernest Points 3431

Rails ( activesupport ) définit Hash#to_param (pseudonyme de 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 optionnel d'espace de nom :

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

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

32voto

Viktor Trón Points 4119

ERB::Util.url_encode

peut être utilisé partout, il fait partie de la librairie ruby std.

9voto

thekingoftruth Points 630

Utilisez soit CGI::escape ou ERB::Util.url_encode mais pas URI.encode .

URI.escape a été déprécié depuis la version 1.9.2 de Ruby : Quelle est la différence entre URI.escape et CGI.escape ?

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X