Given the string:
\"Hello there world\"
how can I create a URL-encoded string like this:
\"Hello%20there%20world\"
<
In 2019, URI.encode is obsolete and should not be used.
require 'uri'
URI.encode("Hello there world")
#=> "Hello%20there%20world"
URI.encode("hello there: world, how are you")
#=> "hello%20there:%20world,%20how%20are%20you"
URI.decode("Hello%20there%20world")
#=> "Hello there world"
If anyone is interested, the newest way to do this is doing in ERB:
<%= u "Hello World !" %>
This will render:
Hello%20World%20%21
u is short for url_encode
You can find the docs here
Ruby's URI is useful for this. You can build the entire URL programmatically and add the query parameters using that class, and it'll handle the encoding for you:
require 'uri'
uri = URI.parse('http://foo.com')
uri.query = URI.encode_www_form(
's' => "Hello there world"
)
uri.to_s # => "http://foo.com?s=Hello+there+world"
The examples are useful:
URI.encode_www_form([["q", "ruby"], ["lang", "en"]])
#=> "q=ruby&lang=en"
URI.encode_www_form("q" => "ruby", "lang" => "en")
#=> "q=ruby&lang=en"
URI.encode_www_form("q" => ["ruby", "perl"], "lang" => "en")
#=> "q=ruby&q=perl&lang=en"
URI.encode_www_form([["q", "ruby"], ["q", "perl"], ["lang", "en"]])
#=> "q=ruby&q=perl&lang=en"
These links might also be useful:
While the current answer says to utilize URI.encode
that has been deprecated and obsolete since Ruby 1.9.2. It is better to utilize CGI.escape
or ERB::Util.url_encode
.