2017-07-25 27 views
1

輸入是一個PARAMS字符串(輸入格式不能更改)無法網址參數字符串進行散列轉換,然後返回到URL字符串

something=1,2,3,4,5&something_else=6,7,8 

預期輸出:

something=1,2,3,4,5&something_else=6,7,8 

我在做什麼:

params = 'something=1,2,3,4,5' 
CGI::parse(params) 
CGI.unescape(CGI.parse(params).to_query) 

而且我得到這個作爲輸出:

something[]=1,2,3,4,5 

當我做CGI::parse(params) 我得到這個:{"something"=>["1,2,3,4,5"]}

這是不對的,因爲它不是一個數組,東西是一個字符串,它是「1,2,3,4,5」,但它是在我做CGI解析時被轉換爲數組。

我需要做CGI解析的原因是因爲我需要操作URL PARAMS。

是否有任何其他可能的方式,我可以在正確的方式轉換它,並保持params格式?

回答

2

CGI模塊是一個完整的恐龍,可能應該扔在垃圾中,因爲它有多糟糕,但由於某種原因,它仍然存在於Ruby核心中。也許有一天有人會重構它並使其可行。在此之前,請跳過它並使用更好的內容,比如URI。

鑑於你的不規則,不符合要求的查詢字符串:

require 'uri' 
decoded = URI.decode_www_form(query_string).to_h 
# => {"something"=>"1,2,3,4,5", "something_else"=>"6,7,8"} 

要重新編碼您只需:

query_string = 'something=1,2,3,4,5&something_else=6,7,8' 

您可以通過使用decode_www_form方法,可處理查詢字符串處理這個請致電encode_www_form,然後強制unescape撤銷正確處理,值的操作:

encoded = URI.unescape(URI.encode_www_form(decoded)) 
# => "something=1,2,3,4,5&something_else=6,7,8" 

這應該得到你想要的效果。

相關問題