Ruby on rails 将空间转换为+;而不是20%
我试图从使用Ruby on Rails的散列创建http参数,我尝试使用Ruby on rails 将空间转换为+;而不是20%,ruby-on-rails,ruby,ruby-on-rails-3,Ruby On Rails,Ruby,Ruby On Rails 3,我试图从使用Ruby on Rails的散列创建http参数,我尝试使用URI.encode\u www\u form(params),但这无法正确生成参数 下面是我的杂烩 params['Name'.to_sym] = 'Nia Kun' params['AddressLine1'.to_sym] = 'Address One' params['City'.to_sym] = 'City Name' 此方法将空间转换为+,我想要的是使用%20转换空间 我得到了“Name=Nia+Kun&Ad
URI.encode\u www\u form(params)
,但这无法正确生成参数
下面是我的杂烩
params['Name'.to_sym] = 'Nia Kun'
params['AddressLine1'.to_sym] = 'Address One'
params['City'.to_sym] = 'City Name'
此方法将空间转换为+
,我想要的是使用%20转换空间
我得到了“Name=Nia+Kun&AddressLine1=Address+One&City=City+Name”
但是我需要将这些空格转换为%20您可以使用:
引述:
此方法不转换*、-、、0-9、A-Z、Z、A-Z,但将SP(ASCII空格)转换为+并将其他转换为%XX
您正在寻找的是
URI::escape
URI::escape "this big string"
=> "this%20big%20string"
编辑
把这一切结合起来:
- 您不需要将
参数转换为符号,rails是智能的,并且了解
,具有访问权限
。字符串和符号都可以工作
- 您的代码如下所示:
你可以这样做:
URI.encode_www_form(params).gsub("+", "%20")
p = {x: 'some word', y: 'hello there'}
URI.encode p.to_a.map {|inner| inner.join('=') }.join('&')
# "x=some%20word&y=hello%20there"
def encode_url(params)
URI.encode params.to_a.map {|inner| inner.join('=')}.join('&')
end
encode_url(my_params)
如果这是你真正需要的
另请参见它为什么以这种方式执行此操作。您可以编写自定义方法。大概是这样的:
URI.encode_www_form(params).gsub("+", "%20")
p = {x: 'some word', y: 'hello there'}
URI.encode p.to_a.map {|inner| inner.join('=') }.join('&')
# "x=some%20word&y=hello%20there"
def encode_url(params)
URI.encode params.to_a.map {|inner| inner.join('=')}.join('&')
end
encode_url(my_params)
所以基本上你们把参数展平到数组的数组中,然后把它们转换成url字符串,然后编码它
编辑:
最终解决方案如下所示:
URI.encode_www_form(params).gsub("+", "%20")
p = {x: 'some word', y: 'hello there'}
URI.encode p.to_a.map {|inner| inner.join('=') }.join('&')
# "x=some%20word&y=hello%20there"
def encode_url(params)
URI.encode params.to_a.map {|inner| inner.join('=')}.join('&')
end
encode_url(my_params)
这是唯一的办法吗?我认为我没有正确使用URI.encode_www_form我知道这是唯一的方法,但很奇怪,这是一个如此基本的东西,我认为应该有一个内置函数来实现这一点,但我可能也错了,因为我是一个初学者,在上面的代码中我需要使用URI::escape,我只想将空间转换为%20,而不是整个url Hello max,它不起作用,将url中的每个空间字符转换为%20或%40。我想知道您希望转义/不转义哪些字符,以及为什么?encode(或其别名)精确地用代码替换所有不安全的字符。如果你不确定某些东西为什么会起作用,那么有很多参考资料——维基百科对此有一个详细的描述。