Entfernen Sie bestimmte Parameter aus der Abfragezeichenfolge der URL
Lesezeit: 3 Minuten
tpow
Ich habe einige Links in einer Powerpoint-Präsentation, und aus irgendeinem Grund wird der URL ein Rückgabeparameter hinzugefügt, wenn auf diese Links geklickt wird. Nun, dieser Rückgabeparameter führt dazu, dass das MVC-Muster meiner Joomla-Site verpfuscht wird.
Was ist eine effiziente Möglichkeit, diesen Rückgabeparameter mit PHP zu entfernen?
Schnell und schmutzig ist es, eine Zeichenfolge zu suchen/ersetzen und/oder Regex zu verwenden, um den Wert abzutöten.
mmm seltsam, mein $parsedurl['query'] ist eine einzelne Zeichenfolge, die alle Parameter enthält
– ajax333221
10. April 2014 um 3:01 Uhr
Beispiel: stackoverflow.com/questions/1251582/…
– Ari
1. September 2015 um 1:34 Uhr
Können Sie ein Beispiel für ein Szenario geben, in dem die schmutzige Regex fehlschlagen würde?
– Vinzenz
25. April 2020 um 5:13 Uhr
Geben Sie bitte ein Beispiel?
– Jones G
14. November 2020 um 8:39 Uhr
parse_url() ist fehlerhaft. Es ist überhaupt nicht sicher, es zu verwenden.
– holden321
7. Januar 2022 um 19:04 Uhr
Lars Kudal
In einem anderen Thread schlägt Justin vor, dass der schnellste Weg die Verwendung ist strtok()
$url = strtok($url, '?');
Siehe auch seine vollständige Antwort mit Geschwindigkeitstests hier: https://stackoverflow.com/a/1251650/452515
Die Frage war, wie man die spezifische GET-Variable entfernt return und nicht alle GET-Variablen zu entfernen.
– mgutt
17. Januar 2020 um 8:57 Uhr
Sergej Telschewski
Dies soll ergänzen Markus B‘s Antwort mit einem Beispiel, obwohl es ziemlich lang aussehen mag, ist es eine sichere Möglichkeit, einen Parameter zu entfernen. In diesem Beispiel entfernen wir page_number
Kommentieren Sie für alle, die diesen Code verwenden, dass dies nur die Abfragezeichenfolge zurückgibt (abzüglich des Parameters, den Sie entfernt haben). Sie haben dann keine vollständige URL mehr, wenn Sie das möchten.
Verfahrenstechnische Umsetzung der Antwort von Marc B nach Verfeinerung der Antwort von Sergey Telshevsky.
function strip_param_from_url($url, $param)
{
$base_url = strtok($url, '?'); // Get the base URL
$parsed_url = parse_url($url); // Parse it
// Add missing {
if(array_key_exists('query',$parsed_url)) { // Only execute if there are parameters
$query = $parsed_url['query']; // Get the query string
parse_str($query, $parameters); // Convert Parameters into array
unset($parameters[$param]); // Delete the one you want
$new_query = http_build_query($parameters); // Rebuilt query string
$url =$base_url.'?'.$new_query; // Finally URL is ready
}
return $url;
}
// Usage
echo strip_param_from_url( 'http://url.example/search/?location=london&page_number=1', 'location' )
Keine gute Idee, wenn “?return=” nicht der letzte Parameter ist. Eine Abfrage wie „urlerror.com/index.php?return=1&test=abc“ würde zu „urlerror.com/index.php&test=abc“ geändert.
mögliches Duplikat von Beautiful way to remove GET-variables with PHP?
– PiTheNumber
5. März 2013 um 12:17 Uhr