J'utilise PHP pour créer l'URL de la page actuelle. Parfois, des URL sous forme de
www.mydomian.com/myurl.html?unwantedthngs
sont demandés. Je veux supprimer le ?
et tout ce qui le suit (chaîne de requête), de sorte que l'URL résultante devienne:
www.mydomain.com/myurl.html
Mon code actuel est le suivant:
<?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;
}
?>
php
query-string
Navi Gamage
la source
la source
Réponses:
Vous pouvez utiliser
strtok
pour obtenir une chaîne avant la première occurrence de?
strtok()
représente la technique la plus concise pour extraire directement la sous-chaîne avant la chaîne?
de requête.explode()
est moins direct car il doit produire un tableau potentiellement à deux éléments par lequel le premier élément doit être accédé.Certaines autres techniques peuvent se casser lorsque la chaîne de requête est manquante ou potentiellement muter d'autres sous-chaînes / involontaires dans l'URL - ces techniques doivent être évitées.
Une démonstration :
Production:
la source
array_shift(explode('?',$_SERVER["REQUEST_URI"]))
?
n'est pas présent.Utilisez PHP Manual - 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 complet):
Fonction mise à jour pour s'assurer que le schéma sera attaché et aucun message de notification n'apparaît:
Reviendra:
Il s'agit de la sortie du passage d'exemples d'URL via parse_url () sans second paramètre (pour explication uniquement).
Et ceci est la sortie finale après avoir construit l'url en utilisant:
Production:
la source
meilleure solution:
Pas besoin d'inclure votre http://domain.com dans votre si vous soumettez un formulaire au même domaine.
la source
la source
code
<? 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"]; $ pageURL = substr ($ pageURL, 0, strrpos ($ pageURL, "?")); } return $ pageURL; }?>code
Le moyen le plus simple
la source
Vous aurez besoin d'au moins PHP version 5.4 pour implémenter cette solution sans exploser dans une variable sur une ligne et concaténer sur la suivante, mais une ligne simple serait:
Variables de serveur: http://php.net/manual/en/reserved.variables.server.php
Déréférencement de tableau: https://wiki.php.net/rfc/functionarraydereferencing
la source
Vous pouvez utiliser la fonction build de parse_url comme ça:
la source
Tu peux essayer:
la source
Si vous souhaitez obtenir le chemin de la demande ( plus d'informations ):
Si vous souhaitez supprimer la requête et (et peut-être aussi fragmenter):
la source
Pour supprimer la chaîne de requête de l'URI de la demande, remplacez la chaîne de requête par une chaîne vide:
la source
www.example.com/myurl.html?
.Étant donné que je gère des URL relatives et absolues, j'ai mis à jour la solution de Veritas comme le code ci-dessous.
Vous pouvez vous essayer ici: https://ideone.com/PvpZ4J
la source
pourrait également utiliser la suite selon le commentaire du manuel php
Veuillez noter que cela ne fonctionne que pour certains environnements PHP uniquement et suivez le commentaire ci-dessous de cette page pour plus d'informations;
la source
Essaye ça
la source
En supposant que vous souhaitiez toujours obtenir l'URL sans les arguments de la requête (s'ils ne sont pas définis), utilisez simplement une instruction raccourcie if pour vérifier
strpos
:la source
Voici une solution simple si vous utilisez Laravel:
la source
Essaye ça:
ou
la source