Ich habe eine Zeichenfolge mit einer vollständigen URL einschließlich GET-Variablen. Wie lassen sich die GET-Variablen am besten entfernen? Gibt es eine gute Möglichkeit, nur einen davon zu entfernen?
Dies ist ein Code, der funktioniert, aber nicht sehr schön ist (glaube ich):
$current_url = explode('?', $current_url);
echo $current_url[0];
Der obige Code entfernt nur alle GET-Variablen. Die URL wird in meinem Fall von einem CMS generiert, sodass ich keine Informationen zu Servervariablen benötige.
Antworten:
Ok, um alle Variablen zu entfernen, ist vielleicht die schönste
Sehen Sie
strtok
hier ungefähr .Es ist das schnellste (siehe unten) und verarbeitet URLs ohne '?' richtig.
Um einen URL + Querystring zu verwenden und nur eine Variable zu entfernen (ohne einen regulären Ausdruck zu verwenden, der in einigen Fällen schneller sein kann), können Sie Folgendes tun:
Ein Regex-Ersatz zum Entfernen einer einzelnen Variable könnte folgendermaßen aussehen:
Hier sind die Timings einiger verschiedener Methoden, um sicherzustellen, dass das Timing zwischen den Läufen zurückgesetzt wird.
zeigt an
strtok gewinnt und ist mit Abstand der kleinste Code.
quelle
Wie wäre es mit:
quelle
/(\\?|&)the-var=.*?(&|$)/
diese Option , um nur eine bestimmte Variable zu entfernen (the-var
hier).Wenn die URL, von der Sie die Abfragezeichenfolge entfernen möchten, die aktuelle URL des PHP-Skripts ist, können Sie eine der zuvor genannten Methoden verwenden. Wenn Sie nur eine Zeichenfolgenvariable mit einer URL haben und alles nach dem '?' du kannst tun:
quelle
?
. Ihr Code gibt dann eine leere Zeichenfolge zurück.$url = ($pos)? substr($url, 0, $pos) : $url;
Inspiriert von dem Kommentar von @MitMaro schrieb ich einen kleinen Benchmark, um die Lösungsgeschwindigkeit von @Gumbo, @Matt Bridges und @justin des Vorschlags in der Frage zu testen:
Ergebnis: @ justins strtok ist der schnellste.
Hinweis: Auf einem lokalen Debian Lenny-System mit Apache2 und PHP5 getestet.
quelle
Eine andere Lösung ... Ich finde diese Funktion eleganter, sie entfernt auch das nachfolgende '?' wenn der zu entfernende Schlüssel der einzige in der Abfragezeichenfolge ist.
Tests:
Wird ausgegeben:
»Führen Sie diese Tests auf 3v4l durch
quelle
Könnten Sie dazu nicht die Servervariablen verwenden?
Oder würde das funktionieren?:
Nur ein Gedanke.
quelle
Sie können die Verwendung Servervariablen für diese, zum Beispiel
$_SERVER['REQUEST_URI']
, oder noch besser:$_SERVER['PHP_SELF']
.quelle
quelle
Wie wäre es mit einer Funktion zum Umschreiben der Abfragezeichenfolge durch Durchlaufen des Arrays $ _GET
! Grobe Darstellung einer geeigneten Funktion
So etwas wäre gut, um es für Paginierungslinks usw. griffbereit zu halten.
quelle
basename($_SERVER['REQUEST_URI'])
gibt alles nach und einschließlich des '?' zurück,In meinem Code brauche ich manchmal nur Abschnitte, also trennen Sie ihn heraus, damit ich den Wert dessen, was ich brauche, im laufenden Betrieb erhalten kann. Ich bin mir nicht sicher, wie schnell die Leistung im Vergleich zu anderen Methoden ist, aber es ist wirklich nützlich für mich.
quelle
Meiner Meinung nach wäre der beste Weg:
Es prüft, ob es einen 'i'-GET-Parameter gibt, und entfernt ihn, falls vorhanden.
quelle
Verwenden Sie einfach echo'd Javascript, um die URL von Variablen mit einem selbst übermittelnden, leeren Formular zu entfernen:
Dann machen Sie diese Javascript-Funktion:
quelle