我想對查詢參數進行一些消毒處理。與Ruby的CGI.parse方法完全相反嗎?
我解析查詢與CGI.parse
,然後我刪除一些參數,但我找不到一個相反的方法來構建查詢。
我真的不希望做這樣的事情
params.map{|n,v| "#{CGI.escape n}=#{CGI.escape v.to_s}"}.join("&")
有一定是一個簡單的方法。在那兒?
我想對查詢參數進行一些消毒處理。與Ruby的CGI.parse方法完全相反嗎?
我解析查詢與CGI.parse
,然後我刪除一些參數,但我找不到一個相反的方法來構建查詢。
我真的不希望做這樣的事情
params.map{|n,v| "#{CGI.escape n}=#{CGI.escape v.to_s}"}.join("&")
有一定是一個簡單的方法。在那兒?
雖然沒有更好的答案,但我會使用現在使用的方法。
def build_query(params)
params.map do |name,values|
values.map do |value|
"#{CGI.escape name}=#{CGI.escape value}"
end
end.flatten.join("&")
end
如果您使用Rails的(或不介意的ActiveSupport拉),那麼你可以使用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
。
我不確定以下是簡化,但它避免了擴展哈希的(鍵,值)對。
params.map{|qq| qq.map{|q| CGI.escape(q)}.join('=')}.join('&')
有一個在URI模塊一個不錯的方法:
require 'uri'
URI.encode_www_form("q" => "ruby", "lang" => "en") #=> "q=ruby&lang=en"
這種運作良好。 – 2011-04-12 09:18:18