我一直在玩cURL,并试图通过POST变量发送数组。我决定使用http_build_query按预期传递字符串:
curl_setopt($this->ch, CURLOPT_POSTFIELDS, http_build_query($sendParams));
我让接收端简单地print_r
' s $_POST,这样我就可以看到通过它发送的是什么。
然而,我得到一个&号附加到所有的父元素后第一个,这是正常的吗?我假设cURL在解析querystring时使用parse_str,因此这里是一个超级简化的示例,它也导致了&符号:
<?php
$array = array('foo', array('bar' => array('baz' => array(1,2,3))), 'test' => array(2,3,4));
parse_str(http_build_query($array), $vars);
print_r($vars);
?>
的回报:
Array ( [0] => foo [amp;1] => Array ( [bar] => Array ( [baz] => Array ( [0] => 1 [1] => 2 [2] => 3 ) ) ) [amp;test] => Array ( [0] => 2 [1] => 3 [2] => 4 ) )
似乎已经回答了我自己的问题…parse_str
被&混淆了,在解析查询字符串之前,我需要先运行html_entity_decode
。