2011-09-01 153 views
0

当我必须使用CURL发送POST请求时,在POST字段中如果它们包含带空格的字符串,我必须url_encode字符串还是函数会为我执行?POST URL使用cURL编码

什么是正确的?

CURLOPT_POSTFIELDS => 'field=this%20is%20good' 

或本

CURLOPT_POSTFIELDS => 'field=this is good' 

我这么问是因为我不希望它到字符串编码的两倍,因此发送不正确的数据。

谢谢

回答

1

你没有具体规定,但我想你使用PHP,对不对?

它必须根据RFC 1738进行urlencoded。 您可以使用函数http_build_query()。我使用的,例如:

$array = array('field' => 'this is good'); 
http_build_query($array, '', '&'); 

你也可以简单地传递$数组作为选项(如CURLOPT_POSTFIELDS => $array),但是这将创建一个多/表单数据请求,而不是“正常”应用/ X- WWW的形式,进行了urlencoded。

PS:你们没有一个是正确的,实际上你应该按照RFC 1738编码空格,而不是用%20编码。

+0

它与urlencode不同吗? –

+0

我试图模仿从js的encodeURIComponent,显然仍然使用%20空间 –

+0

有2个标准。 RFC 3896使用%20,而RFC 1738建议使用+。如果我没有错,“+”是用于历史原因......最终,两种方式都应该没问题。这与urlencode()和rawurlencode()之间存在的差异是相同的! – Qualcuno