wake-up-neo.net

Letzten Teil der URL abrufen PHP

Ich frage mich nur, wie ich den letzten Teil einer URL mit PHP extrahieren kann.

Die Beispiel-URL lautet:

http://domain.com/artist/song/music-videos/song-title/9393903

Wie kann ich nun den letzten Teil mit PHP extrahieren?

9393903

Die URL enthält immer dieselbe Anzahl von Variablen, und die ID ist immer am Ende.

47
Belgin Fish

Sie können preg_match verwenden, um den gewünschten Teil der URL zu finden. 

Da das Muster einfach ist, suchen wir nach einem Schrägstrich (\/ und müssen es umgehen, da der Schrägstrich den Beginn und das Ende des regulären Ausdrucksmusters angibt), zusammen mit einer oder mehreren Ziffern (\d+ ) am Ende der Zeichenfolge ($). Die Klammern um den \d+ werden verwendet, um das Stück zu erfassen, das wir wollen: nämlich das Ende. Wir weisen dann die gewünschte Endung ($end) $matches[1] (nicht $matches[0] zu, da diese mit $url (dh der gesamte String) identisch ist).

$url='http://domain.com/artist/song/music-videos/song-title/9393903';

if(preg_match("/\/(\d+)$/",$url,$matches))
{
  $end=$matches[1];
}
else
{
  //Your URL didn't match.  This may or may not be a bad thing.
}

Hinweis: Sie können diesem regulären Ausdruck möglicherweise etwas mehr Raffinesse hinzufügen. Wenn Sie beispielsweise wissen, dass Ihre URL-Zeichenfolgen always mit http:// beginnen, kann der reguläre Ausdruck zu /^http:\/\/.*\/(\d+)$/ werden (wobei .* null oder mehr Zeichen bedeutet (nicht das Newline-Zeichen)).

24
user554546

Teile es auf und hol dir das letzte Element:

$end = end(explode('/', $url));
# or:
$end = array_slice(explode('/', $url), -1)[0];

Edit: Zur Unterstützung von kanonischen URLs im Apache-Stil ist rtrim hilfreich:

$end = end(explode('/', rtrim($url, '/')));
# or:
$end = array_slice(explode('/', rtrim($url, '/')), -1)[0];

Ein anderes Beispiel, das ich für besser lesbar halte, ist ( Demo ):

$path = parse_url($url, PHP_URL_PATH);
$pathFragments = explode('/', $path);
$end = end($pathFragments);

In diesem Beispiel wird auch berücksichtigt, dass nur der Pfad der URL verwendet wird.


Ein weiteres edit (Jahre später), Kanonisierung und einfache Verwendung von UTF-8 (alternativ über den regulären Ausdruck von PCRE in PHP):

<?php

use function call_user_func as f;
use UnexpectedValueException as e;

$url = 'http://example.com/artist/song/music-videos/song-title/9393903';

$result = preg_match('(([^/]*)/*$)', $url, $m)

    ? $m[1]
    : f(function() use ($url) {throw new e("pattern on '$url'");})
    ;

var_dump($result); # string(7) "9393903"

Das ist ziemlich grob, zeigt aber, wie man dies innerhalb eines preg_match-Aufrufs für eine feinere Steuerung über das reguläre Ausdrucksmuster von PCRE einhüllt. Um diesem Bare-Metal-Beispiel einen Sinn zu geben, sollte es in eine eigene Funktion eingeschlossen werden (was das Aliasing ebenfalls überflüssig machen würde). Dieser Weg wurde der Kürze halber vorgestellt.

87
hakre

Der absolut einfachste Weg, dies zu erreichen, ist mit basename()

echo basename('http://domain.com/artist/song/music-videos/song-title/9393903');

Was wird gedruckt werden

9393903

Wenn am Ende eine Abfragezeichenfolge vorhanden ist, wird sie natürlich in den zurückgegebenen Wert aufgenommen. In diesem Fall ist die akzeptierte Antwort eine bessere Lösung.

81
nikc.org

Wenn Sie nach einer robusten Version suchen, die mit jeder Form von URLs umgehen kann, sollten Sie Folgendes tun:

<?php

$url = "http://foobar.com/foo/bar/1?baz=qux#fragment/foo";
$lastSegment = basename(parse_url($url, PHP_URL_PATH));
14
Peter
$id = strrchr($url,"/");
$id = substr($id,1,strlen($id));

Hier ist die Beschreibung der strrchr-Funktion: http://www.php.net/manual/de/function.strrchr.php

Hoffe das ist nützlich!

12
Tamer Shlash

Andere Option:

$urlarray=explode("/",$url);
$end=$urlarray[count($urlarray)-1];
4
someone

Eine der elegantesten Lösungen war hier Holen Sie sich die Zeichen nach dem letzten/in der URL

von DisgruntledGoat

$id = substr($url, strrpos($url, '/') + 1);

strrpos ermittelt die Position des letzten Vorkommens des Schrägstrichs; substr gibt alles nach dieser Position zurück.

3
Robert Sinclair

Ein Liner: $page_path = end(explode('/', trim($_SERVER['REQUEST_URI'], '/')));

Holen Sie sich URI, schneiden Sie Schrägstriche, konvertieren Sie sie in ein Array, greifen Sie den letzten Teil auf

2
Justin

dadurch kann der letzte Teil der erforderlichen URL leicht abgerufen werden

$url="http://domain.com/artist/song/music-videos/song-title/9393903";
$requred_string= substr(strrchr($url, "/"), 1);

dadurch wird die Zeichenfolge nach dem ersten "/" von rechts angezeigt.

1
XxANxX

Eine funktionierende Antwort:

$url = "http://www.yoursite/one/two/three/drink";
echo $end = end((explode('/', $url)));

Ausgabe: Getränk

0
George Chalhoub

1-Liner

$end = preg_replace( '%^(.+)/%', '', $url );

// if( ! $end ) no match.

Dies entfernt einfach alles vor dem letzten Schrägstrich, einschließlich es.

0
Jorge Orpinel
$mylink = $_SERVER['PHP_SELF'];
$link_array = explode('/',$mylink);
echo $lastpart = end($link_array);
0
Shuhad zaman