解析要添加到 URL 编码的 URL 的字符串

根据字符串:

"Hello there world"

如何创建如下 URL 编码的字符串:

"Hello%20there%20world"

我还想知道,如果字符串还有其他符号,如:

"hello there: world, how are you"

最简单的方法是什么?我打算解析它,然后为它编写一些代码。

81311 次浏览

在2019年,URI.encode 已经过时,不应该使用。


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"

Ruby 的 URI对此很有用。您可以通过编程方式构建整个 URL,并使用该类添加查询参数,它将为您处理编码:

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"

这些例子很有用:

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"

这些链接可能也很有用:

如果有人对此感兴趣,最新的方法是在 ERB 中进行:

    <%= u "Hello World !" %>

这将导致:

你好20World% 20% 21

U 是 < strong > url _ encode 的缩写

你可以找到文件 给你

当前的答案是利用从 Ruby1.9.2开始就已经废弃和过时的 URI.encode。最好利用 CGI.escapeERB::Util.url_encode