Comment obtenir les paramètres multiples avec le même nom à partir d'une URL en PHP
J'ai une application en PHP qui va sur l'occasion, d'avoir à gérer les Url où plus d'un paramètre dans l'URL aura le même nom. Est-il un moyen facile de récupérer toutes les valeurs d'une clé donnée? PHP $_GET retourne uniquement la dernière valeur.
Pour faire de ce béton, ma demande est un résolveur OpenURL, et peuvent obtenir les paramètres d'URL comme ceci:
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
(Oui, je sais, c'est moche, bienvenue dans mon monde). Notez que la touche "rft_id" apparaît deux fois:
rft_id=info:oclcnum/1903126
rft_id=http://www.biodiversitylibrary.org/bibliography/4323
$_GET
sera de retour juste http://www.biodiversitylibrary.org/bibliography/4323
, la valeur antérieure (info:oclcnum/1903126
) ayant été remplacé.
J'aimerais avoir accès à la fois à des valeurs. Est-ce possible en PHP? Si non, toute réflexion sur la façon de gérer ce problème?
Vous devez vous connecter pour publier un commentaire.
Quelque chose comme:
vous donne:
Car il est toujours possible qu'un paramètre de l'URL est répété, il est toujours préférable d'avoir des tableaux, au lieu d'uniquement pour les paramètres dont vous anticiper.
&
, boucle les pièces et de les diviser sur=
. Ensuite url-décoder la sortie et l'enregistrer dans des variables.$_SERVER["QUERY_STRING"]
est pas disponible si la page a été unmultipart/form-data
requête POST? Je ne peux vraiment pas imaginer que... o_O en dehors de celui - savez-vous que PHP crée automatiquement un tableau, si vous ajoutez[]
pour les noms de paramètre?/foo/bar?id[]=1&id[]=2&id[]=42&file=xyz
. Cela fonctionne pour les champs de formulaire ainsi.list($name, $value) = explode('=', $param, 2);
aura un avis de requête param sans=
signe (par exemple,param1=1¶ms=¶m3¶m4=4
). vous devriez d'abord vérifierstrpos($param, '=') !== false
De ne pas travailler pour vous comme il semble que vous n'avez pas le contrôle de la chaîne de requête, mais une autre réponse valable: au Lieu d'analyser la chaîne de recherche, vous pouvez appeand '[]' à la fin de ce nom, PHP va faire un tableau des éléments.
IE:
vous donnera un $_GET ressembler à:
Je pense que vous auriez à analyser
$_SERVER['QUERY_STRING']
manuellement.Quelque chose comme (non testé):
Cela devrait vous donner un tableau
$vars
:Après avoir vu Tomalak de l' réponse, j'aime son format de données pour le tableau qui en résulte beaucoup mieux, car il rend possible l'accès à des touches spécifiques par leur nom.
Il n'y a pas besoin d'utiliser stupide
explode
solutions de contournement pour ce. Une simple regex peut plus facilement rectifier une QUERY_STRING avec plusieurs comme paramètres nommés:Puis c'est aussi simple que d'utiliser
parse_str
:Qui a l'avantage de correctement décodage
%xy
URL échappe tout de suite.Si vous ne voulez qu'un seul ou de quelques paramètres spécifiques extraites sous forme de tableau, puis utilisez
(id|name)
au lieu de(\w+)
dans la regex.Autant que je sache, il n'existe aucun moyen pour obtenir des valeurs en double à l'aide de
$_GET
que la deuxième valeur remplacera le premierPour obtenir autour d'elle, vous pouvez accéder à la crue de la chaîne de recherche à l'aide de
$_SERVER['QUERY_STRING']
et ensuite d'analyser vous-même.Suppose que vous avez une chaîne de requête comme ceci:
Vous pouvez faire ceci :
Qui donne :
Espère que ça aide 😉
Partage ma version de cette fonction