如何使用CGI :: escape编码符号

时间:2015-11-04 22:09:30

标签: ruby-on-rails ruby cgi encode

在我将字符串作为请求中的参数发送之前,我使用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"发送。这就是我需要对 - 符号进行编码的原因。

1 个答案:

答案 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"

-有效,无需编码。