web-dev-qa-db-ja.com

Railsで文字列をURLエスケープするにはどうすればよいですか?

RailsでRHTMLビューを使用している場合、URLエスケープは簡単です。

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

文字列でこれを行うにはどうすればよいですか?私はこのようなことをしたいです:

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

これは些細なことですよね?

54
Josh Glover

CGI.escape はそれを行います:

<% 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)はHash#to_paramを定義します(Hash#to_queryにエイリアスされます):

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

クエリキーを並べ替えることは注目に値します(HTTPキャッシュの場合)。

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

65
Ernest

ERB :: Util.url_encode

Ruby std lib。の一部、どこからでも使用できます。

28
Viktor Trón

CGI::escapeまたはERB::Util.url_encode だがしかし URI.encode

URI.escapeはおよそ廃止されましたRuby 1.9.2: RI.escapeとCGI.escapeの違いは何ですか?

8
thekingoftruth