В основном url экранирует строку, за исключением того, что для пробелов используется '+' вместо '% 20'.
CGI::escape делает именно это:
CGI::escape
irb(main):003:0> require 'cgi' => true irb(main):004:0> CGI::escape("foo and/or bar") => "foo+and%2For+bar"