在我将字符串作为请求中的参数发送之前,我使用CGI::escape
对字符串中的符号进行编码。
它按预期使用'+'
符号,CGI::escape('foo+bar')
按预期返回"foo%2Bbar"
。
但是,我遇到了'-'
符号的问题。 CGI::escape("2015-12-30")
返回"2015-12-30"
。我希望它能归还"2015%2D12%2D30"
。
要添加更多上下文,我正在向端点发出请求。在该端点的规范中,它们指定了它们期望接收参数的方式。我有基本网址,并将参数添加到基本网址。
在规范中,他们要求将日期参数'2015-12-30'
作为"2015%2D12%2D30"
发送。这就是我需要对 - 符号进行编码的原因。
答案 0 :(得分: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"
-
有效,无需编码。