Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/ruby/24.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ruby on rails 将空间转换为+;而不是20%_Ruby On Rails_Ruby_Ruby On Rails 3 - Fatal编程技术网

Ruby on rails 将空间转换为+;而不是20%

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

我试图从使用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&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(或其别名)精确地用代码替换所有不安全的字符。如果你不确定某些东西为什么会起作用,那么有很多参考资料——维基百科对此有一个详细的描述。