parse_str

parse_str($string, &$result)

Analyse une chaîne de paramètres sous la forme qui suit le point d’interrogation dans une URL et les place dans un tableau dans le second paramètre. Elle décode les valeurs (%C3%A9 en « é », + en espace).

Paramètres

  • $string – les paramètres, par exemple « page=2&tri=recent ».
  • $result – une variable qui reçoit le tableau des paramètres.

Exemples

parse_str("page=2&tri=recent", $p);
echo $p["page"]; // 2
// les valeurs sont toujours du texte
var_dump($p["page"]); // string(1) "2"
// décodage : + est une espace, %C3%A9 est é
parse_str("nom=Ren%C3%A9e+Dupont", $p);
echo $p["nom"]; // Renée Dupont
// les crochets créent un tableau
parse_str("tags[]=php&tags[]=mysql&filtre[prix]=100", $p);
echo implode(", ", $p["tags"]); // php, mysql
echo $p["filtre"]["prix"]; // 100
// un point et une espace dans un nom deviennent un tiret bas
parse_str("a.b=1&c d=2", $p);
echo implode(", ", array_keys($p)); // a_b, c_d
// les paramètres d'une URL
parse_str(parse_url("https://www.garth.cz/recherche/?q=php+tableaux", PHP_URL_QUERY), $p);
echo $p["q"]; // php tableaux

Points d’attention

  • Passez toujours le second paramètre. Sans lui, PHP 7.2 à 7.4 crée des variables à partir des paramètres (obsolète et dangereux), depuis PHP 8.0 c’est une ArgumentCountError.
  • Toutes les valeurs sont des chaînes ou des tableaux, convertissez et vérifiez vous-même les nombres.
  • Un paramètre censé être du texte peut arriver sous forme de tableau (tags[]=…). Vérifiez le type de la valeur.
  • Les points et les espaces dans les noms des paramètres se changent en tirets bas, comme dans $_GET.
  • Le nombre de paramètres est limité par le réglage max_input_vars (1000 par défaut), ceux en trop sont ignorés.

Fonctions associées :
parse_url()
http_build_query()
urldecode()
mb_parse_str()
parse_ini_string()