Http_build_query() pour php 4

Contenu du snippet

Version PHP 4 de la fonction http_build_query() disponible sous PHP 5 et ma foi bien pratique... .. .

Source / Exemple :


<?php

// on vérifie quand même que la fonction n'existe pas
if(!function_exists('http_build_query'))
{
    function http_build_query( $formdata, $numeric_prefix = '', $arg_separator = null)
    {
        //on vérifie les données
        if(!is_array($formdata) && !is_object($formdata))
            return false;
                elseif(empty($formdata))
                    return '';
        
        // si le séparateur n'est pas soumis on prend celui de la config serveur 
        if(is_null($arg_separator))
        {
            $arg_separator = @ini_get('arg_separator.output');
            
            if(!$arg_separator) 
                $arg_separator = '&';
        }
        
        // création du builder interne qui servira à parcourir récursivement les tableaux et objets
        $builderCore = '$ret = \'\';
        
        foreach ($array as $k => $v) 
        {
            if (is_scalar($v))
                $ret .= $name.urlencode(\'[\'.$k.\']\').\'=\'.urlencode($v).$sep;
            else
            {
                $builder = create_function(\' $name, $array, $sep, $builderCore\', $builderCore);
                $ret .= $builder( $name.urlencode(\'[\'.$k.\']\'), $v, $sep, $builderCore).$sep;
            }
        }
        return substr( $ret, 0, -strlen($sep));';
        
        $builder = create_function(' $name, $array, $sep, $builderCore', $builderCore);
        
        // on parcours nos données
        $ret = '';
        
        foreach($formdata as $k => $v)
        {
            if (is_integer($k))
                $k = $numeric_prefix.$k;
            
            if(is_scalar($v))
            {
                $ret .= urlencode($k).'='.urlencode($v).$arg_separator;
                continue;
            }
            
            $ret .= $builder( urlencode($k), $v, $arg_separator, $builderCore).$arg_separator;
        }
        
        // on renvois après avoir enlevé le dernier séparateur
        return substr( $ret, 0, -strlen($arg_separator));
    }
}

/*** Exemple d'utilisation ***/

$datas = array(
                'baz' => 'boom',
                'cow' => 'milk',
                'php' => 'hypertext processor',
                'foo' => array(
                                'bar',
                                'foo'
                        ),
                'pwet',
                'plop'
    );

$query1 = http_build_query($datas);
$query2 = http_build_query($datas, '', '&');
$query3 = http_build_query($datas, 'myVar_');

echo '<fieldset style="width:95%;margin:auto;margin-bottom:15px;">
	<legend>http_build_query($data)</legend>
		http_build_query($datas) :            
		     <a href="?'.$query1.'">'.htmlentities($query1).'</a>
			<br />
		http_build_query($datas, \'\', \'&amp;\') : <a href="?'.$query2.'">'.htmlentities($query2).'</a>
			<br />
		http_build_query($datas, \'myVar_\') :   <a href="?'.$query3.'">'.htmlentities($query3).'</a>
    <br />
</fieldset>
<fieldset style="width:95%;margin:auto;margin-bottom:15px;">
	<legend>$datas</legend>
	<pre>
		'.print_r($datas,true).'
	</pre>
</fieldset>';

if(!empty($_GET))
    echo '<fieldset style="width:95%;margin:auto;margin-bottom:15px;">
	<legend>$_GET</legend>
	<pre>
		'.print_r($_GET,true).'
	</pre>
</fieldset>';

?>

Conclusion :


Je ne met pas de fichier d'exemple le bout de code ci dessus étant amplement suffisant... .. .

@ tchaOo°

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.