Obtenir l'URL paramètres de chaîne de requête
Qu'est-ce que les "moins de code nécessaire" de façon à obtenir des paramètres d'une chaîne de requête d'URL qui est formaté comme suit?
www.mysite.com/category/subcategory?myqueryhash
Sortie doit être: myqueryhash
Je suis conscient de cette approche:
www.mysite.com/category/subcategory?q=myquery
<?php
echo $_GET['q']; //Output: myquery
?>
Vous devez vous connecter pour publier un commentaire.
$_SERVER['QUERY_STRING']
contient les données que vous recherchez.DOCUMENTATION
$_SERVER['QUERY_STRING']
montrerafoo=bar2
pour la chaîne de requête commefoo=bar1&foo=bar2
print_r()
déclaration dans<pre>
tags:echo '<pre>'.print_r($_SERVER, TRUE).'</pre>';
.$_SERVER['REQUEST_URI']
, bien que vous pouvez envisager d'utiliser mod_rewrite pour passer la partie de l'URL en tant que variable. Voir stackoverflow.com/questions/16388959/url-rewriting-with-php$_SERVER['QUERY_STRING']
retournefoo=bar1&foo=bar2
dans mon cas.?a=b&a=b
$_SERVER['QUERY_STRING']
retourne exactementa=b&a=b
.Le PHP façon de le faire est d'utiliser la fonction parse_url, qui analyse l'URL et le retour de ses composants. Y compris la chaîne de requête.
Exemple:
Documentation complète ici
La fonction
parse_str()
lit automatiquement tous les paramètres de la requête dans un tableau.Par exemple, si l'URL est
http://www.example.com/page.php?x=100&y=200
, le codeva stocker les paramètres dans le
$queries
array ($queries['x']=100
,$queries['y']=200
).Regarder la documentation de parse_str
MODIFIER
Selon la documentation de PHP,
parse_str()
doit être utilisé uniquement avec un deuxième paramètre. À l'aide deparse_str($_SERVER['QUERY_STRING'])
sur cette URL va créer des variables$x
et$y
, ce qui rend le code vulnérable à des attaques telles quehttp://www.example.com/page.php?authenticated=1
.parse_str
, mais naturellement, il est considéré comme un non-non.parse_str($_SERVER['QUERY_STRING'], $params);
-- maintenant$params
tableau contient toutes les valeurs de chaîne de requête.Si vous voulez l'ensemble de la chaîne de requête:
Je recommande meilleure réponse que
<?php
echo 'Hello ' . htmlspecialchars($_GET["name"]) . '!';
?>
En supposant que l'utilisateur a entré http://example.com/?name=Hannes
L'exemple ci-dessus va afficher:
Bonjour Hannes!
example.com/?Hannes
...Aussi, si vous êtes à la recherche pour le nom du fichier en cours le long de la chaîne de requête, vous aurez juste besoin suivant
Il serait de vous fournir les infos comme exemple suivant
Et si vous aussi vous souhaitez chemin d'accès complet du fichier à partir de la racine, par exemple /dossier/dossier2/fichier.le php?arg1=val&arg2=val alors seulement à éliminer basename() la fonction et l'utilisation juste des fillowing
/
est un caractère valide dans les chaînes de requête (voir la section RFC 3986), de sorte que vous ne pouvez pas compter surbasename
.Voici ma fonction pour reconstruire les parties de la PARRAIN chaîne de requête.
Si la page appelant avait déjà une chaîne de requête dans son propre URL, et vous devez revenir à cette page et que vous voulez envoyer certains, pas tous, de cette
$_GET
vars (par exemple, un numéro de page).Exemple: Référent de la chaîne de requête a été
?foo=1&bar=2&baz=3
appelrefererQueryString( 'foo' , 'baz' )
retournefoo=1&baz=3"
:Grâce à @K. Shahzad
Ceci est utile lorsque vous voulez le réecrit chaîne de requête sans tout réécrire ajouts. Disons que vous réécrivez l' /test/?x=y pour l'indice.le php?q=test&x=y et vous voulez vous voulez seulement la chaîne de requête.
Pour l'obtention de chaque nœud dans l'URI, vous pouvez utiliser la fonction
explode()
$_SERVER['REQUEST_URI']. Si vous souhaitez obtenir des chaînes sans savoir si c'est réussi ou pas. vous pouvez utiliser la fonction que j'ai défini moi-même à obtenir les paramètres de la requête à partir de $_REQUEST (comme il fonctionne à la fois pour le POST et GET params).Il pourrait y avoir certains cas, lorsque l'on veut obtenir les paramètres de la requête converti en type de données Integer, j'ai donc ajouté le troisième paramètre à cette fonction.
Ce code et la notation n'est pas la mienne. Evan K résout un multi de la valeur même de requête de nom avec une fonction personnalisée 😉
est prise à partir de :
http://php.net/manual/en/function.parse-str.php#76792
les Crédits vont à Evan K.
Il est à noter que l'parse_str builtin ne PAS traiter une chaîne de requête dans le CGI façon standard, quand il s'agit de champs dupliqués. Si plusieurs champs de même nom existent dans une chaîne de requête, tous les autres web de traitement de la langue serait de les lire dans un tableau, mais PHP silencieusement les écrase: