Cette fonction m'a beaucoup servi dans la réécriture dynamique des URL.
Retourne un tableau contenant les paramètres de l'URL avec pour indice le nom du paramètre. Si le paramètre demandé n'existe pas la valeur à son indice sera une chaîne vide.
Un paramètre optionel est une liste de paramètre dans un tableau. Vous y affectez les paramètres que vous voulez extraire de l'URL
Exemple
$url="fiche.php?type_doc=son&page=participer&id_info=2&popup=1";
$parametres[]="type_doc";
$parametres[]="id_info";
$tab_parametres=parseUrl($url,$parametres);
le tableau sera uniquement composé de type_doc et id_info.
Si il n'est pas renseigné, la fonction renvoie tous les paramètres.
Si vous voulez récupérer l'ancre (fiche.php?type_doc=son&page=participer&id_info=2&popup=1#ancre) il suffit de demander le parametre "#" dans la liste de parametres. Il est renvoyé par défaut a l'indice # dans le tableau de retour.
Source / Exemple :
<?
/**
- @return string[]
- @param string $url
- @param string[] $parametres //liste des paramètres à extraire
- @desc Retourne un tableau contenant les paramètres de l'URL avec pour indice le nom du paramètre. Si le paramètre demandé n'existe pas la valeur à son indice sera une chaîne vide.
- /
function parseUrl($url,$parametres=null)
{
$i=0;
$params=null;
//on ne garde que les paramètres de l'URL
$tmp_params=explode("?",$url);
if (count($tmp_params)>=2)
$tmp_params=$tmp_params[1];
else
$tmp_params="";
if ($tmp_params!="")
{
$ancre=explode("#",$tmp_params);
if (count($ancre)==2)
{
$tmp_params=$ancre[0];
$ancre=$ancre[1];
}
else
$ancre="";
//on isole les parametres
$tmp_params=explode('&',$tmp_params);
//On stocke dans un tableau les variables comprises dans l'URL.
//format du tableau :
//['id_lang'] => 1
//['id_rub'] => 27
//['id_art'] => 5
foreach ($tmp_params as $param)
{
$value=explode('=',$param);
if (count($value)>=2)
{
$params[$value[0]]=$value[1];
}
}
if ($parametres!=null)
{
$tmp_params=null;
//On stocke dans un tableau les variables comprises dans l'URL, demandées dans le tableau
//passé en paramètre.
//format du tableau :
//['id_lang'] => 1
//['id_rub'] => 27
//['id_art'] => 5
foreach ($parametres as $param)
{
//si il y a une ancre de demandée on l'ajoute
if ($param=='#')
$params["#"]=$ancre;
//si le parametre demandé n'existe pas on lui affecte une chaine vide.
if (!isset($params[$param]))
$params[$param]="";
$tmp_params[$param]=$params[$param];
}
$params=$tmp_params;
}
}
return $params;
}
?>
28 févr. 2006 à 13:51
Je ne te prends pas pour un idiot, je te montre que ta fonction fait double emploi avec parse_url () (qui est une fonction interne PHP), moyennant 2-3 lignes de code en plus...
28 févr. 2006 à 13:36
Son but était soit de te (et a d'autre par la même occasion) faire comprendre quelque chose et/ou bien de comprendre ce que tu as fait.
Visiblement je ne suis pas le seul à ne pas avoir compris le but de ton script, maintenant c'est plus clair...
Comme quoi ce fut utile ;-)
28 févr. 2006 à 13:28
"Cette fonction m'a beaucoup servi dans la réécriture dynamique des URL."
Cas réel : un site web entier, je dois y implanter URL Rewriting.
Dans le site, les URL sont créées sous cette forme
fiche.php?type_doc=son&page=participer&id_info=2&popup=1#ancre
Je dois les transformer en
fiche/son.participer.le-titre-du-document.2.1.php
C'est à partir d'une chaine qu'on récupère les paramètres, et pas de l'URL que le client appelle...
Je ne sais pas comment mieux m'exprimer...
Pour la complexité, y a 2 cas, un avec le choix des paramètres, l'autre non, et y a la gestion de l'ancre aussi.
Essayez de copmrendre exactement à quoi sert le script avant de me prendre pour un idiot, je sais que $_GET[] existe !
En esperant avoir été compris.
28 févr. 2006 à 12:41
28 févr. 2006 à 12:12
Parce que si on s'en tient à l'url courante, en effet, ce code est encore plus inutile.
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.