开发者

How do I URL-escape a string in Rails?

开发者 https://www.devze.com 2023-03-07 04:31 出处:网络
If I\'m in an RHTML view in Rails, it is easy to URL-escape something: <a href=\"/redirect?href=<%=u target %>\">Foo</a>

If I'm in an RHTML view in Rails, it is easy to URL-escape something:

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

How do I do this in a string? I'd like to do something like this:

<% redirect_href = "/redirect?#{url_escape target}&amp;foo=bar&amp;baz=some_other_stuff" -%>
<a href="&l开发者_如何学JAVAt;%= redirect_href =>">Foo</a>

This must be trivial, right?


CGI.escape will do it:

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


Rails (activesupport) defines Hash#to_param (aliased to Hash#to_query):

 {foo: 'asd asdf', bar: '"<#$dfs'}.to_param
 # => "bar=%22%3C%23%24dfs&foo=asd+asdf"

It's worth noting that it sorts query keys (for HTTP caching).

Hash#to_param also accepts optional namespace parameter:

{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

can be used from anywhere, part of ruby std lib.


Use either CGI::escape or ERB::Util.url_encode but not URI.encode.

URI.escape has been deprecated circa Ruby 1.9.2: What's the difference between URI.escape and CGI.escape?

0

精彩评论

暂无评论...
验证码 换一张
取 消