ruby-on-rails – 如何在Rails中将空格的params替换为”而不是”

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

params = {name:’John Key’}

并使用方法to_param:

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

关键是”使用的服务没有正确读取’并且需要”而是name = John Key:When to encode space to plus (+) or %20?

有没有办法在没有使用gsub的情况下返回params?

解决方法

我建议只是坚持使用gsub,也许用评论来解释这种行为的必要性.

虽然您可以通过使用URI.escape来解决问题,但据推测它已被弃用,因为它不完全符合RFC规范. See here对它进行了很好的记录.

Hash#to_param是Hash#to_query的别名,它调用Object#to_query.证明这个问题的最简单的例子是:

'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.escape和URI.escape之间差异的原因.

相关文章

validates:conclusion,:presence=>true,:inclusion=>{...
一、redis集群搭建redis3.0以前,提供了Sentinel工具来监控各...
分享一下我老师大神的人工智能教程。零基础!通俗易懂!风趣...
上一篇博文 ruby传参之引用类型 里边定义了一个方法名 mo...
一编程与编程语言 什么是编程语言? 能够被计算机所识别的表...
Ruby类和对象Ruby是一种完美的面向对象编程语言。面向对象编...