我正在寻找一个将哈希转换为查询字符串的函数。我知道Rack::Utils.build_query
,但它+
用于空格。
问问题
456 次
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"
至于使用%20
or的问题+
,请参见“何时将空格编码为加号 (+) 或 %20? ”。
于 2013-10-28T00:12:19.227 回答