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

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

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

但参数列表如下所示:

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

这里出了什么问题? -*. 标志工作正常,它只是+将被空格所取代。

这是正常的URL编码, 加号是空格的简写 :

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

从HTML5标准 :

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

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

解决方案是将客户端数据编码为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连接。)