2015-11-04 45 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

当您尝试时发生了什么? –