Entfernen Sie bestimmte Parameter aus der Abfragezeichenfolge der URL

Lesezeit: 3 Minuten

Benutzeravatar von tpow
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?

Beispiel:
http://mydomain.example/index.php?id=115&Itemid=283&return=aHR0cDovL2NvbW11bml0

  • mögliches Duplikat von Beautiful way to remove GET-variables with PHP?

    – PiTheNumber

    5. März 2013 um 12:17 Uhr

Benutzeravatar von Marc B
Markus B

Die sicherste “richtige” Methode wäre:

  1. Parsen Sie die URL in ein Array mit parse_url()
  2. Extrahieren Sie den Abfrageteil und zerlegen Sie ihn mithilfe von in ein Array parse_str()
  3. Löschen Sie die gewünschten Abfrageparameter unset() sie aus dem Array
  4. Erstellen Sie die ursprüngliche URL neu mit http_build_query()

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


Benutzeravatar von Lars Koudal
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

Benutzeravatar von Sergey Telshevsky
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

<?php
$x = 'http://url.example/search/?location=london&page_number=1';

$parsed = parse_url($x);
$query = $parsed['query'];

parse_str($query, $params);

unset($params['page_number']);
$string = http_build_query($params);
var_dump($string);

  • Danke Sergey und danke @Marc B, brillante Hilfe.

    – luke_mclachlan

    6. März 2015 um 14:52 Uhr

  • 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.

    – Codemonkey

    15. November 2018 um 18:00 Uhr

function removeParam($url, $param) {
    $url = preg_replace('/(&|\?)'.preg_quote($param).'=[^&]*$/', '', $url);
    $url = preg_replace('/(&|\?)'.preg_quote($param).'=[^&]*&/', '$1', $url);
    return $url;
}

Benutzeravatar von NikiC
NikiC

parse_str($queryString, $vars);
unset($vars['return']);
$queryString = http_build_query($vars);

parse_str analysiert eine Abfragezeichenfolge, http_build_query erstellt eine Abfragezeichenfolge.

Benutzeravatar von adilbo
Adilbo

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' )

Benutzeravatar von Aaron Hathaway
Aaron Hathaway

Du könntest ein preg_replace mögen:

$new_url = preg_replace('/&?return=[^&]*/', '', $old_url);

  • 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.

    – kraftb

    18. November 2013 um 13:54 Uhr

  • preg_replace(‘/return=[^&]?&?/i’, ”, $_SERVER[‘REQUEST_URI’]);

    – Chris Greenwood

    27. Mai 2014 um 16:32 Uhr

  • Diese Antwort ist falsch. Analyse: stackoverflow.com/a/47527628/318765

    – mgutt

    28. November 2017 um 9:33 Uhr

1440850cookie-checkEntfernen Sie bestimmte Parameter aus der Abfragezeichenfolge der URL

This website is using cookies to improve the user-friendliness. You agree by using the website further.

Privacy policy