我正在寻找一个将哈希转换为查询字符串的函数。我知道Rack::Utils.build_query
但它使用+
作为空格。
答案 0 :(得分:0)
build_query
使用Rack::Utils.escape
,用+字符替换空格。您可以添加使用Rack::Utils.escape_path
的build_query版本,例如
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')
。
答案 1 :(得分: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
或+
的问题,请参阅“When to encode space to plus (+) or %20?”。