75

给定字符串:

"Hello there world"

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

"Hello%20there%20world"

我还想知道如果字符串也有其他符号该怎么办,例如:

"hello there: world, how are you"

最简单的方法是什么?我打算解析然后为此构建一些代码。

4

4 回答 4

134

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"
于 2013-06-29T02:12:52.647 回答
25

虽然当前的答案说使用URI.encode自 Ruby 1.9.2 以来已被弃用和过时。最好使用CGI.escapeERB::Util.url_encode

于 2018-03-27T13:26:13.097 回答
19

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"

这些链接也可能有用:

于 2013-06-29T03:10:05.797 回答
19

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

    <%= u "Hello World !" %>

这将呈现:

你好%20世界%20%21

uurl_encode的缩写

你可以在这里找到文档

于 2017-05-30T22:57:47.133 回答