【问题标题】:How to encode symbols using CGI::escape如何使用 CGI::escape 对符号进行编码
【发布时间】:2015-11-04 22:09:29
【问题描述】:

在我将字符串作为请求中的参数发送之前,我使用CGI::escape 对字符串中的符号进行编码。

'+' 符号按预期工作,CGI::escape('foo+bar') 按预期返回 "foo%2Bbar"

但是,我遇到了'-' 符号的问题。 CGI::escape("2015-12-30") 返回"2015-12-30"。我希望它能够返回"2015%2D12%2D30"

为了添加更多上下文,我正在向端点发出请求。在该端点的规范中,他们指定了他们期望如何接收参数。我有基本 url,并且正在向基本 url 添加参数。

在规范中,他们要求将日期参数'2015-12-30' 发送为"2015%2D12%2D30"。这就是为什么我需要对 - 符号进行编码。

【问题讨论】:

  • 您是否已有 URL,或者您是否正在尝试向 URL 添加值?如果是这样,CGI 不是正确的库。 URI 会更有用。

标签: ruby-on-rails ruby cgi encode


【解决方案1】:

使用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"

- 有效,无需编码。

【讨论】:

  • 我添加了更多上下文,说明为什么需要对 - 符号进行编码。
  • 你认为我应该在我发送之前将- 符号与他们的期望一起gsub 吗?
  • 很遗憾,对端点的请求不起作用。他们想要- 编码。由于- 有效,可能存在标准错误?
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2010-10-31
  • 1970-01-01
  • 2011-06-11
  • 1970-01-01
  • 2011-11-22
  • 1970-01-01
  • 2011-11-19
相关资源
最近更新 更多