我想对查询参数进行一些净化。
我使用CGI.parse
解析查询,然后删除一些参数,但我找不到相反的方法来构建查询。
我不想像这样做:
params.map{|n,v| "#{CGI.escape n}=#{CGI.escape v.to_s}"}.join("&")
一定有更简单的方法。有吗?
require 'uri'
URI.encode_www_form("q" => "ruby", "lang" => "en") #=> "q=ruby&lang=en"
to_param
(AKA to_query
)文档。{ :a => '&', :b => 'Where is pancake house?', :c => ['an', 'array'] }.to_param
# a=%26&b=Where+is+pancake+house%3F&c%5B%5D=an&c%5B%5D=array
to_param
处理数组的方式与您的版本有些不同,它将输出 c[]=an&c[]=array
而不是只有 c=an&c=array
。
虽然没有更好的答案,但我将提供我目前使用的方法。
def build_query(params)
params.map do |name,values|
values.map do |value|
"#{CGI.escape name}=#{CGI.escape value}"
end
end.flatten.join("&")
end
我不确定以下是否是一个简化,但它避免了哈希表的(键,值)对的扩展。
params.map{|qq| qq.map{|q| CGI.escape(q)}.join('=')}.join('&')