[ruby] URI.encodeは "/" をエンコードしない対策

id:moro に教えてもらったので展開。

require "erb"
require "uri"

s = "まつむら"

u = URI.encode(s)                   # => "%E3%81%BE%E3%81%A4%E3%82%80%E3%82%89"
e = ERB::Util.u(s)                  # => "%E3%81%BE%E3%81%A4%E3%82%80%E3%82%89"

URI.decode(u)                   # => "\343\201\276\343\201\244\343\202\200\343\202\211"
URI.decode(e)                   # => "\343\201\276\343\201\244\343\202\200\343\202\211"

s = "http://test.host/o# %$"

u = URI.encode(s)                   # => "http://test.host/o%23%20%25$"
e = ERB::Util.u(s)                  # => "http%3A%2F%2Ftest.host%2Fo%23%20%25%24"

URI.decode(u)                   # => "http://test.host/o# %$"
URI.decode(e)                   # => "http://test.host/o# %$"

ERB::Util.uを利用するとよいとのことです。
$とかもエンコードしない模様。