Wie bekomme ich den letzten Pfad in einer URL?

Lesezeit: 5 Minuten

Wie bekomme ich den letzten Pfad in einer URL
bahamut100

Ich möchte das letzte Pfadsegment in einer URL erhalten:

  • http://blabla/bla/wce/news.php oder
  • http://blabla/blablabla/dut2a/news.php

In diesen beiden URLs möchte ich beispielsweise das Pfadsegment abrufen: „wce“ und „dut2a“.

Ich habe versucht zu verwenden $_SERVER['REQUEST_URI'], aber ich bekomme den gesamten URL-Pfad.

Versuchen:

$url="http://blabla/blablabla/dut2a/news.php";
$tokens = explode("https://stackoverflow.com/", $url);
echo $tokens[sizeof($tokens)-2];

Vorausgesetzt $tokens hat mindestens 2 Elemente.

  • bahamut100, Wenn dies die richtige Antwort ist, sollten Sie sie akzeptieren, indem Sie auf das weiße Häkchen daneben klicken.

    – Mike Sherow

    16. Februar 10 um 13:56 Uhr

  • @bahamut100, gerne geschehen. Obwohl ich mich für die Antwort von Alex entscheiden (und akzeptieren) würde.

    – Bart Kiers

    16. Februar 10 um 13:59 Uhr

  • Es wird nicht übergeben: http:/ /foobar.com/path/path#fragment/fragment

    – ddimitrow

    16. Februar 2010 um 14:11 Uhr


  • @ddimitrov: Ja, guter Punkt. Umso mehr Grund für das OP, sich für die Lösung von Alex zu entscheiden. Kann meine Antwort jedoch nicht entfernen, da es die akzeptierte Antwort ist …

    – Bart Kiers

    16. Februar 10 um 14:24 Uhr

  • Fragmente sind nicht wirklich ein Problem, da sie nicht auf den Server übertragen werden. Eine URL wie diese wäre jedoch ein Problem: http://www.example.com/dir1/dir2/foo?redirect=http://anothersite.com/default.as‌​px

    – eis

    26. November 12 um 21:46 Uhr


Wie bekomme ich den letzten Pfad in einer URL
Alex

Versuche dies:

function getLastPathSegment($url) {
    $path = parse_url($url, PHP_URL_PATH); // to get the path from a whole URL
    $pathTrimmed = trim($path, "https://stackoverflow.com/"); // normalise with no leading or trailing slash
    $pathTokens = explode("https://stackoverflow.com/", $pathTrimmed); // get segments delimited by a slash

    if (substr($path, -1) !== "https://stackoverflow.com/") {
        array_pop($pathTokens);
    }
    return end($pathTokens); // get the last segment
}

    echo getLastPathSegment($_SERVER['REQUEST_URI']);

Ich habe es auch mit ein paar URLs aus den Kommentaren getestet. Ich muss davon ausgehen, dass alle Pfade mit einem Schrägstrich enden, da ich nicht erkennen kann, ob /bob ein Verzeichnis oder eine Datei ist. Dies wird davon ausgehen, dass es sich um eine Datei handelt, es sei denn, sie hat auch einen nachgestellten Schrägstrich.

echo getLastPathSegment('http://server.com/bla/wce/news.php'); // wce

echo getLastPathSegment('http://server.com/bla/wce/'); // wce

echo getLastPathSegment('http://server.com/bla/wce'); // bla

  • +1 Für die Verwendung parse_url um nur den URL-Pfad zu erhalten. Aber das musst du mit machen $_SERVER['REQUEST_URI'] sowie.

    – Gumbo

    16. Februar 10 um 13:59 Uhr


  • ich dachte $_SERVER['REQUEST_URI'] kam immer wieder mit something/like/this ?

    – Alex

    16. Februar 10 um 14:03 Uhr

  • @alex: Nein, in PHP enthält es auch die Abfrage. Also URL-Pfad und URL-Abfrage (wie in der HTTP-Request-Zeile).

    – Gumbo

    16. Februar 10 um 14:13 Uhr

  • @gumbo Danke für den Tipp, ich habe auch einen Funktionswrapper dafür erstellt.

    – Alex

    16. Februar 10 um 14:19 Uhr

  • in etwa so: /bla/wce/news.php würde es nicht zurückkehren news.php anstatt wce wie der OP wollte? Sollte es nicht das vorletzte Element anstelle von end() zurückgeben? Ich habe das nicht wirklich getestet, da es eine PHP-Version >= 5.1.2 erfordert, also cmiiw.

    – Andik

    16. Februar 10 um 15:24 Uhr

1642597328 312 Wie bekomme ich den letzten Pfad in einer URL
Stepan Suworow

es ist leicht

<?php
 echo basename(dirname($url)); // if your url/path includes a file
 echo basename($url); // if your url/path does not include a file
?>
  • basename gibt die nachgestellte nachgestellte Namenskomponente von path zurück
  • dirname gibt den Pfad des übergeordneten Verzeichnisses zurück

http://php.net/manual/en/function.dirname.php

http://php.net/manual/en/function.basename.php

  • hätte vorher eine Filterung der URL gebrauchen können. Wird an so etwas scheitern http://www.example.com/dir1/dir2/foo?redirect=http://anothersite.com/default.aspx

    – Andik

    19. Februar 10 um 3:21 Uhr


  • Ich habe es einfach mit basename() gelöst, auf deine Art habe ich das zweite Level in “retro” erhalten

    – unterzeichnen

    11. November 13 um 22:24 Uhr

  • basename($_SERVER['PHP_SELF']); tat es für mich

    – Nils

    11. April 16 um 17:19 Uhr


  • @insign Was das OP gefragt hat

    – Andreas Bergström

    24. März 17 um 5:41 Uhr

Versuche dies:

 $parts = explode("https://stackoverflow.com/", 'your_url_here');
 $last = end($parts);

$arr =  explode("https://stackoverflow.com/", $uri);

  • Dies ist nur die halbe Lösung, und reine Code-Antworten sind bei Stackoverflow von geringem Wert.

    – mickmackusa

    22. Dezember 19 um 1:30 Uhr

  • @mickmackusa Nun, du bist ungefähr 10 Jahre zu spät zur Party. Nützliches Feedback.

    – Gabe

    6. Januar 20 um 22:35 Uhr

  • Ich diskriminiere mein Ehrenamt nicht nach Zeit. Alte Posts mit geringem Wert werden von neuen Besuchern gelesen und fördern neue Posts mit geringem Wert. Ich möchte, dass sich dieser Ort ständig verbessert – egal wie alt der Inhalt ist. Bitte etwas über diesen Beitrag.

    – mickmackusa

    6. Januar 2020 um 22:39 Uhr


1642597328 780 Wie bekomme ich den letzten Pfad in einer URL
Briganti

Eine andere Lösung:

$last_slash = strrpos("https://stackoverflow.com/", $url);
$last = substr($url, $last_slash);

1: Abrufen der Position des letzten Schrägstrichs 2: Abrufen der Teilzeichenfolge zwischen dem letzten Schrägstrich und dem Ende der Zeichenfolge

Schau hier: PRÜFUNG

  • Dies ist nur die halbe Lösung, und reine Code-Antworten sind bei Stackoverflow von geringem Wert.

    – mickmackusa

    22. Dezember 19 um 1:30 Uhr

  • @mickmackusa Nun, du bist ungefähr 10 Jahre zu spät zur Party. Nützliches Feedback.

    – Gabe

    6. Januar 20 um 22:35 Uhr

  • Ich diskriminiere mein Ehrenamt nicht nach Zeit. Alte Posts mit geringem Wert werden von neuen Besuchern gelesen und fördern neue Posts mit geringem Wert. Ich möchte, dass sich dieser Ort ständig verbessert – egal wie alt der Inhalt ist. Bitte etwas über diesen Beitrag.

    – mickmackusa

    6. Januar 2020 um 22:39 Uhr


1642597328 869 Wie bekomme ich den letzten Pfad in einer URL
Tim Cooper

Wenn Sie eine absolute URL verarbeiten möchten, können Sie verwenden parse_url() (es funktioniert nicht mit relativen URLs).

$url="http://aplicaciones.org/wp-content/uploads/2011/09/skypevideo-500x361.jpg?arg=value#anchor";
print_r(parse_url($url));
$url_path = parse_url($url, PHP_URL_PATH);
$parts = explode("https://stackoverflow.com/", $url_path);
$last = end($parts);
echo $last;

Vollständiges Codebeispiel hier: http://codepad.org/klqk5o29

.

547990cookie-checkWie bekomme ich den letzten Pfad in einer URL?

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

Privacy policy