Получить последнюю часть URL-адреса PHP

Мне просто интересно, как я могу извлечь последнюю часть URL-адреса с помощью PHP.

Пример URL:

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

Теперь, как я могу извлечь финальную часть с помощью PHP?

9393903

В URL всегда есть такое же количество переменных, и идентификатор всегда находится в конце.

Ответ 1

Вы можете использовать preg_match, чтобы соответствовать той части URL, которую вы хотите.

В этом случае, поскольку шаблон прост, мы ищем косую черту (\/, и нам нужно избегать его, поскольку передняя косая черта обозначает начало и конец шаблона регулярного выражения), а также один или больше цифр (\d+) в самом конце строки ($). Скобки вокруг \d+ используются для захвата фрагмента, который мы хотим: а именно, конца. Затем мы назначаем окончание, которое мы хотим ($end), на $matches[1] (не $matches[0], так как это то же самое, что $url (т.е. Вся строка)).

$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.
}

Примечание.. Вы можете или не захотите добавить некоторую сложность в это регулярное выражение. Например, если вы знаете, что строки вашего URL будут всегда начинаться с http://, тогда регулярное выражение может стать /^http:\/\/.*\/(\d+)$/ (где .* означает ноль или более символов (это не символ новой строки )).

Ответ 2

Разделите его и получите последний элемент:

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

Изменить: для поддержки URL-адресов, rtrim стиле apache, rtrim удобен:

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

Другой пример, который может считаться более читаемым, - это (Демо):

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

Этот пример также учитывает только работу по пути URL.


Еще одно редактирование(), канонизация включало:

<?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"

Это довольно грубо, но показывает, как это сделать при вызове preg_match для более тонкого управления с помощью шаблона регулярного выражения PCRE. Чтобы добавить некоторый смысл в этот простой пример, он должен быть обернут внутри функции его собственной (что также сделает излишним псевдоним). Просто представил этот путь для краткости.

Ответ 3

Абсолютным простейшим способом добиться этого является basename()

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

Будет напечатан

9393903

Конечно, если в конце есть строка запроса, она будет включена в возвращаемое значение, и в этом случае принятый ответ является лучшим решением.

Ответ 4

Если вы ищете надежную версию, которая может иметь дело с любой формой URL-адресов, это должно сделать красиво:

<?php

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

Ответ 6

Другая опция:

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

Ответ 7

Одно из самых элегантных решений было здесь Получить символы после последнего/в URL

DisgruntledGoat

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

strrpos получает позицию последнего вхождения косой черты; зиЬзЬг возвращает все после этой позиции.

Ответ 8

Один вкладыш: $page_path = end(explode('/', trim($_SERVER['REQUEST_URI'], '/')));

Получить URI, обрезать косые черты, преобразовать в массив, захватить последнюю часть

Ответ 9

это облегчит работу, чтобы получить последнюю часть требуемого URL

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

вы получите строку после первого "/" справа.

Ответ 10

1-лайнер

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

// if( ! $end ) no match.

Это просто удаляет все до последней косой черты, включая его.

Ответ 11

Один рабочий ответ:

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

Выход: напиток

Ответ 12

$mylink = $_SERVER['PHP_SELF'];
$link_array = explode('/',$mylink);
echo $lastpart = end($link_array);