如果我有这个参数添加到URL
params = {name:’John Key’}
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之间差异的原因.
原文地址:https://www.jb51.cc/ruby/264993.html
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。