http_build_query est visiblement moins connue qu'on y penserait car beaucoup s'échinent encore à refaire son boulot en PHP.

Depuis PHP 5, http_build_query() génère une chaîne de requête en encodage URL.

http_build_query  ( array $formdata  , string $numeric_prefix  [, string $arg_separator  ] )

Le fonctionnement est assez simple et la fonction ci-dessous à utiliser pour les versions antérieures l'explique aussi assez bien.

On a un implode des couples param/valeur eux même séparé par un =.

Depuis 5.1.2, l'implode utilise $arg_separator comme glue, c'est la valeur par défaut est celle de la directive arg-separator configurée dans php.ini

Les éventuelles clés numériques dans la structure du tableau sont préfixées par le second paramètres (vide par défaut).

Un autre traitement à noter : L'ensemble des paramètres et valeurs sont urlencodés et depuis 5.1.3 Les crochets sont échappés.

Avant php 5 on avait ceci

[php]
<?php
if (!function_exists('http_build_query')) {
    function http_build_query($data, $prefix='', $sep='', $key='') {
        $ret = array();
        foreach ((array)$data as $k => $v) {
            if (is_int($k) && $prefix != null) {
                $k = urlencode($prefix . $k);
            }
            if ((!empty($key)) || ($key === 0))  $k = $key.'['.urlencode($k).']';
            if (is_array($v) || is_object($v)) {
                array_push($ret, http_build_query($v, '', $sep, $k));
            } else {
                array_push($ret, $k.'='.urlencode($v));
            }
        }
        if (empty($sep)) $sep = ini_get('arg_separator.output');
        return implode($sep, $ret);
    }// http_build_query
}//if
?>