2015-11-04 75 views
1

在我發送字符串作爲請求中的參數之前,我使用CGI::escape來對字符串中的符號進行編碼。如何使用CGI編碼符號:: escape

它按照預期與'+'符號一起工作,並且CGI::escape('foo+bar')返回"foo%2Bbar"

但是,我遇到了'-'符號的問題。 CGI::escape("2015-12-30")返回"2015-12-30"。我希望它返回"2015%2D12%2D30"

要添加更多上下文,我正在向端點發出請求。在該端點的規格中,他們指定了他們希望如何接收參數。我有基礎網址,並且正在向基礎網址添加參數。

在規格中,他們要求Date參數'2015-12-30'作爲"2015%2D12%2D30"發送。這就是爲什麼我需要編碼-符號。

+0

你已經有了一個URL,或者你正在嘗試給URL添加值嗎?如果是這樣,CGI不是合適的庫。 URI會更有用。 –

回答

0

使用URI,不是CGI:

require 'uri' 

uri = URI.parse('http://www.example.com') 
uri.query = URI::encode_www_form(
    'a' => '1+1', 
    'b' => '/path/to/file', 
    'c' => '2015-12-30' 

) 
uri.to_s 
# => "http://www.example.com?a=1%2B1&b=%2Fpath%2Fto%2Ffile&c=2015-12-30" 

-是有效的,並不需要進行編碼。

+0

我爲什麼需要編碼'-'符號增加了更多的上下文。 – srm

+0

你認爲我應該在發送之前用他們期待的gsub符號代替'-'符號嗎? – srm

+0

當您嘗試時發生了什麼? –