2011-03-09 27 views
8

我想對查詢參數進行一些消毒處理。與Ruby的CGI.parse方法完全相反嗎?

我解析查詢與CGI.parse,然後我刪除一些參數,但我找不到一個相反的方法來構建查詢。

我真的不希望做這樣的事情

params.map{|n,v| "#{CGI.escape n}=#{CGI.escape v.to_s}"}.join("&") 

有一定是一個簡單的方法。在那兒?

回答

2

雖然沒有更好的答案,但我會使用現在使用的方法。

def build_query(params) 
    params.map do |name,values| 
    values.map do |value| 
     "#{CGI.escape name}=#{CGI.escape value}" 
    end 
    end.flatten.join("&") 
end 
+0

這種運作良好。 – 2011-04-12 09:18:18

3

如果您使用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

0

我不確定以下是簡化,但它避免了擴展哈希的(鍵,值)對。

params.map{|qq| qq.map{|q| CGI.escape(q)}.join('=')}.join('&') 
5

有一個在URI模塊一個不錯的方法:

require 'uri' 
URI.encode_www_form("q" => "ruby", "lang" => "en") #=> "q=ruby&lang=en" 
相關問題