J'ai une chaîne avec une URL complète comprenant des variables GET. Quelle est la meilleure façon de supprimer les variables GET? Existe-t-il un bon moyen d'en supprimer un seul?
C'est un code qui fonctionne mais qui n'est pas très beau (je pense):
$current_url = explode('?', $current_url);
echo $current_url[0];
Le code ci-dessus supprime simplement toutes les variables GET. L'URL est dans mon cas générée à partir d'un CMS, je n'ai donc pas besoin d'informations sur les variables du serveur.
Réponses:
Ok, pour supprimer toutes les variables, la plus jolie est peut-être
Voyez
strtok
ici .C'est le plus rapide (voir ci-dessous), et gère les URL sans «?» correctement.
Pour prendre une URL + Querystring et supprimer une seule variable (sans utiliser de regex replace, ce qui peut être plus rapide dans certains cas), vous pouvez faire quelque chose comme:
Une regex replace pour supprimer une seule var pourrait ressembler à ceci:
Voici les horaires de quelques méthodes différentes, garantissant que le chronométrage est réinitialisé entre les courses.
spectacles
strtok gagne et est de loin le plus petit code.
la source
Que diriez-vous:
la source
/(\\?|&)the-var=.*?(&|$)/
pour supprimer uniquement une variable spécifique (the-var
ici).Si l'URL dont vous essayez de supprimer la chaîne de requête est l'URL actuelle du script PHP, vous pouvez utiliser l'une des méthodes mentionnées précédemment. Si vous avez juste une variable de chaîne avec une URL et que vous souhaitez supprimer tout ce qui se trouve au-delà du «?» tu peux faire:
la source
?
. Votre code renverra alors une chaîne vide.$url = ($pos)? substr($url, 0, $pos) : $url;
Inspiré par le commentaire de @MitMaro, j'ai écrit un petit benchmark pour tester la vitesse des solutions de @Gumbo, @Matt Bridges et @justin la proposition dans la question:
Résultat: le strtok de @ justin est le plus rapide.
Remarque: testé sur un système Debian Lenny local avec Apache2 et PHP5.
la source
Autre solution ... Je trouve cette fonction plus élégante, elle supprimera également le '?' si la clé à supprimer est la seule de la chaîne de requête.
Tests:
Sortira:
»Exécutez ces tests sur 3v4l
la source
N'avez-vous pas pu utiliser les variables de serveur pour ce faire?
Ou cela fonctionnerait-il?:
Juste une pensée.
la source
Vous pouvez utiliser les variables du serveur pour cela, par exemple
$_SERVER['REQUEST_URI']
, ou encore mieux:$_SERVER['PHP_SELF']
.la source
la source
Que diriez-vous d'une fonction pour réécrire la chaîne de requête en boucle sur le tableau $ _GET
! Aperçu approximatif d'une fonction appropriée
Quelque chose comme ça serait bon à garder à portée de main pour les liens de pagination, etc.
la source
basename($_SERVER['REQUEST_URI'])
renvoie tout après et y compris le '?',Dans mon code, je n'ai parfois besoin que de sections, alors séparez-les pour que je puisse obtenir la valeur de ce dont j'ai besoin à la volée. Je ne suis pas sûr de la vitesse de performance par rapport aux autres méthodes, mais c'est vraiment utile pour moi.
la source
À mon avis, la meilleure façon serait la suivante:
Il vérifie s'il existe un paramètre «i» GET et le supprime s'il y en a.
la source
il suffit d'utiliser le javascript echo pour débarrasser l'URL de toutes les variables avec un formulaire vierge à soumission automatique:
Ensuite, faites cette fonction javascript:
la source