EDITAR : Desde php5 en adelante, http_build_query
se recomienda el uso de :
string http_build_query ( mixed $query_data [, string $numeric_prefix [,
string $arg_separator [, int $enc_type = PHP_QUERY_RFC1738 ]]] )
Ejemplo simple del 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:
Del manual :
CURLOPT_POSTFIELDS
Los datos completos para publicar en una operación HTTP "POST". Para publicar un archivo, anteponga un nombre de archivo con @ y use la ruta completa. El tipo de archivo se puede especificar explícitamente siguiendo el nombre del archivo con el tipo en el formato '; type = mimetype'. Este parámetro puede pasarse como una cadena codificada en urlencoded como 'para1 = val1 & para2 = val2 & ...' o como una matriz con el nombre del campo como clave y los datos del campo como valor. Si el valor es una matriz, el encabezado Content-Type se establecerá en multipart / form-data. A partir de PHP 5.2.0, los archivos que se pasan a esta opción con el prefijo @ deben estar en forma de matriz para funcionar.
Entonces, algo como esto debería funcionar perfectamente (con parámetros pasados en una matriz asociativa):
function preparePostFields($array) {
$params = array();
foreach ($array as $key => $value) {
$params[] = $key . '=' . urlencode($value);
}
return implode('&', $params);
}
http_build_query($data)
ya que&
es el separador predeterminado.