RailsでRHTMLビューを使用している場合、URLエスケープは簡単です。
<a href="/redirect?href=<%=u target %>">Foo</a>
文字列でこれを行うにはどうすればよいですか?私はこのようなことをしたいです:
<% redirect_href = "/redirect?#{url_escape target}&foo=bar&baz=some_other_stuff" -%>
<a href="<%= redirect_href =>">Foo</a>
これは些細なことですよね?
CGI.escape はそれを行います:
<% redirect_href = "/redirect?#{CGI.escape target}&foo=bar&baz=some_other_stuff" -%>
<a href="<%= redirect_href =>">Foo</a>
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
Ruby std lib。の一部、どこからでも使用できます。
CGI::escape
またはERB::Util.url_encode
だがしかし URI.encode
。
URI.escape
はおよそ廃止されましたRuby 1.9.2: RI.escapeとCGI.escapeの違いは何ですか?