Récupération de plusieurs paramètres portant le même nom à partir d'URL en PHP
La variable superglobale $_GET de PHP permet d'accéder facilement aux paramètres d'URL, mais elle a une limitation : pour les paramètres de même nom, il renvoie uniquement la dernière valeur. Cela peut gêner les applications qui doivent gérer plusieurs occurrences de paramètres spécifiques dans les URL.
Prenons l'exemple d'un résolveur OpenURL, qui peut rencontrer des URL avec plusieurs instances du paramètre "rft_id" :
ctx_ver=Z39.88-2004 &rft_id=info:oclcnum/1903126 &rft_id=http://www.biodiversitylibrary.org/bibliography/4323 &rft_val_fmt=info:ofi/fmt:kev:mtx:book &rft.genre=book &rft.btitle=At last: a Christmas in the West Indies. &rft.place=London, &rft.pub=Macmillan and co., &rft.aufirst=Charles &rft.aulast=Kingsley &rft.au=Kingsley, Charles, &rft.pages=1-352 &rft.tpages=352 &rft.date=1871
Récupérer les deux valeurs de "rft_id" à l'aide de $_GET serait problématique, car cela ne renverrait que la deuxième valeur ("http://www.biodiversitylibrary.org/bibliography/4323"), en écrasant le premier.
Pour relever ce défi, nous pouvons utiliser une approche plus sophistiquée :
$query = explode('&', $_SERVER['QUERY_STRING']); $params = array(); foreach ($query as $param) { // Handling cases where $param lacks an '=' if (strpos($param, '=') === false) { $param .= '='; } list($name, $value) = explode('=', $param, 2); $params[urldecode($name)][] = urldecode($value); }
Ce code analyse la chaîne de requête en paramètres individuels, chaque paire clé-valeur étant stockée dans le tableau $params. Les valeurs des paramètres portant le même nom sont stockées sous forme de tableau dans le tableau $params.
Pour l'exemple d'URL, le résultat serait :
array( 'ctx_ver' => array('Z39.88-2004'), 'rft_id' => array('info:oclcnum/1903126', 'http://www.biodiversitylibrary.org/bibliography/4323'), // ... other parameters ... )
En utilisant cette approche, vous pouvez facilement accéder aux deux valeurs de "rft_id" ou à tout autre paramètre pouvant apparaître plusieurs fois dans une URL.
Ce qui précède est le contenu détaillé de. pour plus d'informations, suivez d'autres articles connexes sur le site Web de PHP en chinois!