$ _POST值取消加号

时间:2011-09-14 02:05:34

标签: php post curl

我们使用POST通过API调用传递ssh公钥。奇怪的是,当我们在PHP中获得值时,加号(+)符号被完全剥离。显然,这不起作用,因为它改变了公钥的价值。

请参阅以下原始卷曲请求:

curl "https://api.example.com/v1/keys" -X POST -d "key=ssh-dss AAAAB3NzaC1kc3MAAACBAOLsyYuyI0/3/UjajY8ljdgkAV2k9jZxjlVGWvHa9afMuO7DqsOcu0o4e5D9TPScsO5XrgTrmcXHkOtM54fOPdXSzonWOXUIn1XEumdHDlv9YRZTCW/A9qajhPR67y+92su9AqeGXI0/q3BXZsZcC1nr1NjgSiz++r+YZFVWfQsNAAAAFQCYBf0KXVLfYUE6cOTbWnBWn5Py9QAAAIEA3WAkAwhR7fhwWpxuwxNnsB8NXwsEs2NWiOaiMu3dmDWyqGRjfOYUchoLelBMpv4oLTZuaGW4/DCWfdh6pgrxs39MXf+FdTir8KeHIIoXEdcXpWqnuyNBdXn5XNY54vc1eMkbm4q3D1i3+IMhNAURasdvFRoDzgH9s68Ik3P5HrMAAACAab+CiT010wXMzv+6v+oWcRWbxhGou/ND+K2QGU1kAW+KuUGmhOgB6XPka7iEsIeA/+Ojh+OiNedFZlJAZq1jarew106YCOrUlbtDk7pAAUJQhIhKFhpNE0UhLRBWOF9LpjDwWu55dlrfLURE32TuMx/NsazWVypbzJqy48d2sg8= justin@mbpro"

但是,当我们在PHP中var_dump() $ _POST ['key']的值时,它是:

string(601) "ssh-dss AAAAB3NzaC1kc3MAAACBAOLsyYuyI0/3/UjajY8ljdgkAV2k9jZxjlVGWvHa9afMuO7DqsOcu0o4e5D9TPScsO5XrgTrmcXHkOtM54fOPdXSzonWOXUIn1XEumdHDlv9YRZTCW/A9qajhPR67y 92su9AqeGXI0/q3BXZsZcC1nr1NjgSiz  r YZFVWfQsNAAAAFQCYBf0KXVLfYUE6cOTbWnBWn5Py9QAAAIEA3WAkAwhR7fhwWpxuwxNnsB8NXwsEs2NWiOaiMu3dmDWyqGRjfOYUchoLelBMpv4oLTZuaGW4/DCWfdh6pgrxs39MXf FdTir8KeHIIoXEdcXpWqnuyNBdXn5XNY54vc1eMkbm4q3D1i3 IMhNAURasdvFRoDzgH9s68Ik3P5HrMAAACAab CiT010wXMzv 6v oWcRWbxhGou/ND K2QGU1kAW KuUGmhOgB6XPka7iEsIeA/ Ojh OiNedFZlJAZq1jarew106YCOrUlbtDk7pAAUJQhIhKFhpNE0UhLRBWOF9LpjDwWu55dlrfLURE32TuMx/NsazWVypbzJqy48d2sg8= justin@mbpro"

知道导致加号的原因是什么?

4 个答案:

答案 0 :(得分:25)

+加上表单数据中的字符被某些服务器解释为空格字符。

您可以通过将表单数据中的加号字符编码为%2B来避免这种情况。不使用-d/--data,而是使用cURL's --data-urlencode parameter来执行此操作。

如果您构建传出请求,

PHP's rawurlencode function可以执行相同的编码。但是,当服务器上的PHP脚本访问传入的响应数据时,它已经被自动解码,因此您不需要(也不应该)自己调用rawurldecode

答案 1 :(得分:0)

您必须将适当的URL编码字符串传递给curl的data参数。您可以使用online URL encoder作为一次性情况。

答案 2 :(得分:-1)

你有魔术引号吗?

以下是解决类似问题的现有问题: Why are $_POST variables getting escaped in PHP?

你还需要对帖子值进行url编码,即使它们不像get值那样直接进入URL。

答案 3 :(得分:-1)

您可能还想考虑使用base64encode代替urlencode。有时urlencode/decode会做出意想不到的事情,但我认为在这种情况下它也会对你有用。

http://php.net/manual/en/function.base64-encode.php