Quelle est la méthode "moins de code nécessaire" pour obtenir des paramètres à partir d'une chaîne de requête URL formatée comme suit?
www.mysite.com/category/subcategory?myqueryhash
La sortie doit être: myqueryhash
Je connais cette approche:
www.mysite.com/category/subcategory?q=myquery
<?php
echo $_GET['q']; //Output: myquery
?>
php
url
query-string
enloz
la source
la source
$_SERVER['QUERY_STRING']
s'afficherafoo=bar2
pour la chaîne de requête commefoo=bar1&foo=bar2
print_r()
déclaration dans les<pre>
balises:echo '<pre>'.print_r($_SERVER, TRUE).'</pre>';
.$_SERVER['REQUEST_URI']
, même si vous pouvez envisager d'utiliser mod_rewrite pour passer cette partie de l'URL en tant que variable. Voir stackoverflow.com/questions/16388959/url-rewriting-with-phpLa façon PHP de le faire est d'utiliser la fonction parse_url , qui analyse une URL et retourne ses composants. Y compris la chaîne de requête.
Exemple:
Documentation complète ici
la source
La fonction
parse_str()
lit automatiquement tous les paramètres de requête dans un tableau.Par exemple, si l'URL est
http://www.example.com/page.php?x=100&y=200
, le codestockera les paramètres dans le
$queries
tableau ($queries['x']=100
,$queries['y']=200
).Regardez la documentation de parse_str
ÉDITER
Selon la documentation PHP,
parse_str()
ne doit être utilisé qu'avec un deuxième paramètre. L'utilisationparse_str($_SERVER['QUERY_STRING'])
de cette URL créera des variables$x
et$y
, ce qui rend le code vulnérable aux attaques telles quehttp://www.example.com/page.php?authenticated=1
.la source
parse_str
, mais naturellement, c'est considéré comme un non-non.parse_str($_SERVER['QUERY_STRING'], $params);
- maintenant le$params
tableau contiendra toutes les valeurs de la chaîne de requête.Si vous voulez la chaîne de requête entière:
la source
Je recommanderai la meilleure réponse comme
<?php echo 'Hello ' . htmlspecialchars($_GET["name"]) . '!'; ?>
En supposant que l'utilisateur a saisi http://example.com/?name=Hannes
L'exemple ci-dessus affichera:
Bonjour Hannes!
la source
example.com/?Hannes
...De plus, si vous recherchez le nom de fichier actuel avec la chaîne de requête, vous aurez juste besoin de suivre
Il vous fournirait des informations comme l'exemple suivant
Et si vous voulez également le chemin complet du fichier à partir de la racine, par exemple /folder/folder2/file.php?arg1=val&arg2=val, supprimez simplement la fonction basename () et utilisez simplement fillowing
la source
/
est un caractère valide dans les chaînes de requête (voir RFC 3986 ), vous ne pouvez donc pas vous y fierbasename
.Voici ma fonction pour reconstruire des parties de la chaîne de requête du REFERRER .
Si la page appelante avait déjà une chaîne de requête dans sa propre URL , et vous devez revenir à cette page et vouloir renvoyer certains, pas tous, de ces
$_GET
vars (par exemple un numéro de page).Exemple: la chaîne de requête du référent
?foo=1&bar=2&baz=3
appelait desrefererQueryString( 'foo' , 'baz' )
retoursfoo=1&baz=3"
:la source
Ce code et cette notation ne m'appartiennent pas. Evan K résout une requête portant le même nom à plusieurs valeurs avec une fonction personnalisée;) provient de:
http://php.net/manual/en/function.parse-str.php#76792 Les crédits vont à Evan K.
Il convient de mentionner que la fonction intégrée parse_str ne traite PAS une chaîne de requête de la manière standard CGI, lorsqu'il s'agit de dupliquer des champs. Si plusieurs champs du même nom existent dans une chaîne de requête, tous les autres langages de traitement Web les liraient dans un tableau, mais PHP les écrase silencieusement:
la source
Merci à @K. Shahzad Cela vous aide lorsque vous souhaitez réécrire la chaîne de requête sans ajout de réécriture. Supposons que vous réécrivez / test /? X = y dans index.php? Q = test & x = y et que vous ne souhaitiez que la chaîne de requête.
la source
Langage de programmation: PHP
Cela a fonctionné pour moi. J'espère que cela vous aidera aussi :)
la source
Pour obtenir chaque nœud dans l'URI, vous pouvez utiliser la fonction
explode()
de $ _SERVER ['REQUEST_URI']. Si vous voulez obtenir des chaînes sans savoir si elles sont passées ou non. vous pouvez utiliser la fonction que j'ai définie moi-même pour obtenir les paramètres de requête de $ _REQUEST (car elle fonctionne à la fois pour les paramètres POST et GET).Dans certains cas, nous souhaitons convertir les paramètres de requête en type Integer, j'ai donc ajouté le troisième paramètre à cette fonction.
la source