EDITAR : A partir de php5, o uso de http_build_query
é recomendado:
string http_build_query ( mixed $query_data [, string $numeric_prefix [,
string $arg_separator [, int $enc_type = PHP_QUERY_RFC1738 ]]] )
Exemplo simples do manual:
<?php
$data = array('foo'=>'bar',
'baz'=>'boom',
'cow'=>'milk',
'php'=>'hypertext processor');
echo http_build_query($data) . "\n";
/* output:
foo=bar&baz=boom&cow=milk&php=hypertext+processor
*/
?>
antes de php5:
Do manual :
CURLOPT_POSTFIELDS
Os dados completos para postar em uma operação HTTP "POST". Para postar um arquivo, acrescente um nome de arquivo com @ e use o caminho completo. O tipo de arquivo pode ser especificado explicitamente seguindo o nome do arquivo com o tipo no formato '; type = mimetype'. Este parâmetro pode ser passado como uma string codificada por url como 'para1 = val1 & para2 = val2 & ...' ou como uma matriz com o nome do campo como chave e os dados do campo como valor. Se o valor for uma matriz, o cabeçalho Content-Type será definido como multipart / form-data. A partir do PHP 5.2.0, os arquivos passados para esta opção com o prefixo @ devem estar na forma de array para funcionar.
Então, algo assim deve funcionar perfeitamente (com parâmetros passados em uma matriz associativa):
function preparePostFields($array) {
$params = array();
foreach ($array as $key => $value) {
$params[] = $key . '=' . urlencode($value);
}
return implode('&', $params);
}
http_build_query($data)
pois&
é o separador padrão.