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


Answers:


130

在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"

4
如果您还想编码点:URI.encode('api.example.com', /\W/)
Dennis

3
不起作用,例如URI.encode("http://google.com") => "http://google.com"。更好地使用CGI.escape"https%3A%2F%2Fgoogle.com"
localhostdotdev

20

当前的答案是说,URI.encode从Ruby 1.9.2开始,不推荐使用和过时的方法。最好利用CGI.escapeERB::Util.url_encode


18

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"

这些链接也可能有用:


如何将require'uri'嵌入html.erb?还是必须将其放入控制器中?
Mohamed El Mahallawy

2
正确的事情是,在需要简单的逻辑之外的任何时间,都是要做控制器中的所有“计算”。
Tin Man

凉。我们什么时候应该使用助手?如果我们进行计算,该计算将在助手中的许多地方使用并包含在控制器中,该怎么办?有关系吗?
Mohamed El Mahallawy

18

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

    <%= u "Hello World !" %>

这将呈现:

你好%20World%20%21

url_encode的缩写

您可以在这里找到文档

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.