Comment faire pour supprimer la chaîne de requête et obtenir seulement l'url?
Im à l'aide de PHP pour construire l'URL de la page en cours. Parfois, les Url dans le formulaire de
www.mydomian.com/myurl.html?unwantedthngs
sont demandés. Je veux enlever l' ?
et tout ce qui le suit (querystring), telles que l'URL devient:
www.mydomain.com/myurl.html
Mon code actuel est: est-ce
<?php
function curPageURL() {
$pageURL = 'http';
if ($_SERVER["HTTPS"] == "on") {
$pageURL .= "s";
}
$pageURL .= "://";
if ($_SERVER["SERVER_PORT"] != "80") {
$pageURL .= $_SERVER["SERVER_NAME"] . ":" .
$_SERVER["SERVER_PORT"] . $_SERVER["REQUEST_URI"];
} else {
$pageURL .= $_SERVER["SERVER_NAME"] . $_SERVER["REQUEST_URI"];
}
return $pageURL;
}
?>
- BTW, que l'on appelle la "chaîne de requête".
- La question est de plus de un ans c'est probablement un bon moment pour accepter une réponse 😉
- La question est de plus de 7 ans, c'est probablement un bon moment pour accepter une réponse 😉
Vous devez vous connecter pour publier un commentaire.
Vous pouvez utiliser
strtok
pour obtenir la chaîne avant de la première occurence de?
explode()
sera de retour la totalité de la chaîne si le séparateur n'est pas trouvé. PHP 5.4$uri = explode($_SERVER["REQUEST_URI"],'?')[0];
avant PHP 5.4array_shift(explode($_SERVER["REQUEST_URI"],'?'));
array_shift(explode('?',$_SERVER["REQUEST_URI"]))
?
n'est pas présent.explode
retourne la chaîne de caractères complète que la première clé du tableau lorsque le séparateur n'est pas trouvé, même dans les anciennes versions. vérifier icistrtok
au lieu deexplode
parce qu'elle renvoie une chaîne de caractères et non pas un tableau mais est-il une autre raison derrière cela? Merci de modifier votre réponse et votre raisonnement il y a donc peaple ont une meilleure compréhension de pourquoi pour utilisationstrtok
. merciUtilisation Manuel PHP - parse_url() pour obtenir les pièces dont vous avez besoin.
Modifier (exemple d'utilisation pour @Navi Gamage)
Vous pouvez l'utiliser comme ceci:
Modifier (deuxième exemple):
Mis à jour afin d'être sûr régime sera jointe et aucun avis de messages apparaissent:
Sera de retour:
C'est la sortie de passer à un exemple d'url par le biais de parse_url() avec pas de second paramètre (à des fins d'explication).
Et c'est le résultat final, après la construction de l'url à l'aide de:
De sortie:
meilleure solution:
Pas besoin d'inclure votre http://domain.com dans votre si vous êtes à la soumission d'un formulaire pour le même domaine.
code
<?fonction php curPageURL() { $pageURL = 'http'; if ($_SERVER["HTTPS"] == "on") {$pageURL .= "s";} $pageURL .= "://"; if ($_SERVER["SERVER_PORT"] != "80") { $pageURL .= $_SERVER["SERVER_NAME"].":".$_SERVER["SERVER_PORT"].$_SERVER["REQUEST_URI"]; } else { $pageURL .= $_SERVER["SERVER_NAME"].$_SERVER["REQUEST_URI"]; $pageURL = substr( $pageURL, 0, strrpos( $pageURL, "?")); } return $pageURL; } ?>code
Plus Simple
Vous aurez besoin d'au moins la Version de PHP 5.4 pour mettre en œuvre cette solution sans faire exploser dans une variable sur une ligne et la concaténation sur le côté, mais facile, doublure serait:
Les Variables De Serveur: http://php.net/manual/en/reserved.variables.server.php
Tableau Déréférencement: https://wiki.php.net/rfc/functionarraydereferencing
Si vous voulez obtenir une demande de chemin (plus d'infos):
Si vous souhaitez supprimer la requête et (et peut-être fragment):
Vous pouvez essayer:
Pour supprimer la chaîne de requête à partir de l'URI de la demande, remplacer la chaîne de requête avec une chaîne vide:
Parce que je deal avec à la fois relative et absolue des Url, j'ai mis à jour veritas est une solution comme le code ci-dessous.
Vous pouvez essayer vous-même ici: https://ideone.com/PvpZ4J
Vous pouvez utiliser le parse_url construire en fonction comme ça:
Essayer cette
pourrait également utiliser après que par le manuel php commentaire
Veuillez noter que ce travail uniquement pour certains d'environnement PHP seulement et suivez le soufflet commentaire de cette page pour plus d'informations;
En supposant que vous voulez toujours obtenir l'URL sans la requête args (si elles ne sont pas définies), il suffit d'utiliser une abréviation, si la déclaration de vérifier avec
strpos
:Essayez ceci:
ou