在Rails 3(Ruby 1.9.2)中,我发送了一个请求
Started GET "/controller/action?path=/41_+"
但参数列表如下所示:
{"path"=>"/41_ ",
"controller"=>"controller",
"action"=>"action"}
这里出了什么问题? -
,*
或.
符号工作正常,只有+
将被空格取代。
答案 0 :(得分:23)
这是正常的网址编码,the plus sign is a shorthand for a space:
在查询字符串中,加号被保留为空格的简写表示法。因此,必须编码真正的加号。此方法用于使查询URI更容易在不允许空格的系统中传递。
该角色是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连接。)