2015-09-29 69 views
4

我想從哈希中創建http參數我已經使用Ruby on Rails,我嘗試過使用URI.encode_www_form(params),但這不會正確生成參數。encode_www_form將空間轉換爲+而不是%20

下面是哈希我有

params['Name'.to_sym] = 'Nia Kun' 
params['AddressLine1'.to_sym] = 'Address One' 
params['City'.to_sym] = 'City Name' 

This method converts space to +,我希望它是convert space with %20

我越來越"Name=Nia+Kun&AddressLine1=Address+One&City=City+Name"但我需要這個空間轉換爲%20

回答

0

你可以使用GSUB

myString.gsub(" ", "%20") 

引述doc

此方法不轉換*, - , - ,0-9,AZ,_,AZ,但SP(ASCII空格)轉換爲+,並將其轉換他人XX% 。

+0

是它的唯一途徑?我以爲我不使用URI.encode_www_form正確 –

+0

@ opensource-ios我想,請參閱編輯 –

+0

downvoter你能解釋爲什麼投票嗎? –

0

你在找什麼是URI::escape

URI::escape "this big string" 
=> "this%20big%20string" 

編輯

把它放在一起:

  • 你並不需要轉換爲符號的params,Rails是一個聰明,知道with_indifferent_access。字符串和符號都可以工作。
  • 您的代碼應該是這樣的:

name = params['Name']# = 'Nia Kun' 
address_one = params['AddressLine1']# = 'Address One' 
city = params['City']# = 'City Name' 

URI::encode "http://www.example.com?name=#{name}&address_one=#{address_one}&city=#{city}" 

#=> "http://www.example.com?name=Nia%20Kun&address_one=Address%20One&city=City%20Name" 
+0

在上面代碼是否需要使用URI :: escape,我只想將空間轉換爲%20而不是整個URL –

+0

@ opensource-ios爲了清晰起見而編輯。 –

+0

你好,它不工作,並將網址中的每個空間字符轉換爲%20或%40 –

1

您可以編寫自定義方法。事情是這樣的:

p = {x: 'some word', y: 'hello there'} 
URI.encode p.to_a.map {|inner| inner.join('=') }.join('&') 
# "x=some%20word&y=hello%20there" 

所以基本上你壓扁PARAMS數組的數組,然後將其轉化爲URL字符串,然後對其進行編碼。

編輯:

最終的解決方案將是這樣的:

def encode_url(params) 
    URI.encode params.to_a.map {|inner| inner.join('=')}.join('&') 
end 

encode_url(my_params)