-1

我正在寻找一个将哈希转换为查询字符串的函数。我知道Rack::Utils.build_query,但它+用于空格。

4

2 回答 2

0

build_query利用Rack::Utils.escape, 用 + 字符替换空格。您可以添加使用的 build_query 版本Rack::Utils.escape_path,例如

module Rack::Utils
  def your_build_query(params)
    params.map { |k, v|
      if v.class == Array
        build_query(v.map { |x| [k, x] })
      else
        v.nil? ? escape_path(k) : "#{escape_path(k)}=#{escape_path(v)}"
      end
    }.join("&")
  end
end

但一切都是escape_path(s)这样escape(s).gsub('+', '%20'),所以你可以打电话Rack::Utils.build_query(s).gsub('+', '%20')

于 2013-10-27T22:23:33.537 回答
0

你看过URI::encode_www_form吗?它内置在 Ruby 中。

从文档中:

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"

至于使用%20or的问题+,请参见“何时将空格编码为加号 (+) 或 %20? ”。

于 2013-10-28T00:12:19.227 回答