ruby-on-rails - 如何在 Rails 中使用空格作为 '%20' 而不是 '+' 获取 url 的参数

标签 ruby-on-rails ruby url-encoding

如果我有这个参数用于添加到 URL

params = { name: 'John Key' }

并使用方法to_param:

params.to_param
 => "name=John+Key"

重点是 '+' 没有被所使用的服务正确读取,需要 '%20' 而不是 name=John%20Key: When to encode space to plus (+) or %20?

有没有办法在不使用 gsub 的情况下返回带有“%20”的参数?

最佳答案

我会建议只坚持使用 gsub,也许用注释来解释这种行为的必要性。

虽然您可以通过使用 URI.escape 解决问题,但据说它已被弃用,因为它不完全符合 RFC 规范。 See here写一篇关于它的精彩文章。

Hash#to_paramHash#to_query的别名,调用Object#to_query。演示此 +%20 问题的最简单示例是:

'John Key'.to_query(:name) # => "name=John+Key"

Object#to_query 的实现是:

def to_query(key)
  "#{CGI.escape(key.to_param)}=#{CGI.escape(to_param.to_s)}"
end

因此,我们发现:

CGI.escape("John Key") # => "John+Key"

因此,这就是为什么我提到了 CGI.escapeURI.escape 之间的区别。

关于ruby-on-rails - 如何在 Rails 中使用空格作为 '%20' 而不是 '+' 获取 url 的参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38353767/

相关文章:

mysql - 为什么 Rails 在创建新记录时在 SQL 查询中生成 BINARY

ruby - 等待 SuckerPunch::Job 任务完成

java - 如何创建隐藏其参数的 Wicket URL?

angularjs - 在 angularjs 的查询字符串中使用波斯字符

ruby-on-rails - ruby 中空白行的正确缩进?

ruby-on-rails - 如何运行 Cucumber 和 RSPEC?

ruby-on-rails - 获取 mongoid 生成的原始 mongo 数据库查询表达式

ruby-on-rails - 尝试登录和使用 heroku 时无法识别 ruby​​.exe

ruby-on-rails - 呈现要发布的评论时出现方法错误

url - 逃脱 | Wiki 标记模板中 URL 中的(垂直条/管道)