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连接。)