Rails:加号用空格代替GET-Request

时间:2011-06-24 07:51:49

标签: ruby-on-rails ruby get request params

在Rails 3(Ruby 1.9.2)中,我发送了一个请求

 Started GET "/controller/action?path=/41_+"

但参数列表如下所示:

 {"path"=>"/41_ ",
   "controller"=>"controller",
   "action"=>"action"}

这里出了什么问题? -*.符号工作正常,只有+将被空格取代。

2 个答案:

答案 0 :(得分:23)

这是正常的网址编码,the plus sign is a shorthand for a space

  

在查询字符串中,加号被保留为空格的简写表示法。因此,必须编码真正的加号。此方法用于使查询URI更容易在不允许空格的系统中传递。

来自HTML5 standard

  

该角色是U + 0020 SPACE角色
  用一个U + 002B PLUS SIGN字符(+)替换字符。

答案 1 :(得分:2)

对于POST请求,(如果你们有些人偶然发现这个问题,就像我一样)可能会遇到这个问题,因为有人以错误的方式对数据进行了编码在客户端。将数据编码为application/x-www-form-urlencoded将告诉rails在解码URL时对数据进行解码,因此根据标准RFC1738替换带有空格的+符号,因为@ explained也是如此短

解决方案是将客户端的数据编码为multipart/form-data

在PHP中,使用cURL,这是通过考虑以下问题来完成的:

  

将数组传递给CURLOPT_POSTFIELDS会将数据编码为   multipart / form-data,传递URL编码的字符串将进行编码   数据为application / x-www-form-urlencoded。 http://php.net/manual/en/function.curl-setopt.php

您可能想知道为什么我在客户端使用PHP(因为我的示例中的客户端是另一个Web服务器,因为我正在使用API​​连接。)