ruby on rails-解析字符串以添加到URL编码的URL

给定字符串:

"Hello there world"

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

"Hello%20there%20world"

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

"hello there: world, how are you"

这样做最简单的方法是什么? 我要解析,然后为此构建一些代码。

4个解决方案
107 votes
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"
Arie Xiao answered 2019-10-09T19:00:34Z
16 votes

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"

这些链接也可能有用:

  • 何时将空格编码为加号(+)或%20?
  • 编码空格字符的URL:+或%20?
  • 17.13.4 W3的“ HTML文档中的表单”建议中的表单内容类型。
the Tin Man answered 2019-10-09T19:01:29Z
12 votes

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

    <%= u "Hello World !" %>

这将呈现:

你好%20World%20%21

你是url_encode的缩写

您可以在这里找到文档

oschvr answered 2019-10-09T19:02:17Z
11 votes

尽管当前答案是说利用URI.encode,该版本自Ruby 1.9.2开始就已弃用和过时。 最好利用CGI.escapeERB::Util.url_encode

Benjamin answered 2019-10-09T19:02:41Z
translate from https://stackoverflow.com:/questions/17375947/parsing-string-to-add-to-url-encoded-url