Получить последнюю часть URL PHP - PullRequest
52 голосов
/ 13 сентября 2011

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

Пример URL:

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

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

9393903

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

Ответы [ 12 ]

90 голосов
/ 13 сентября 2011

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

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

Редактировать: Для поддержки канонических URL-адресов в стиле 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.


Еще одно редактирование (спустя годы), канонизация и простое альтернативное использование UTF-8 (через регулярное выражение PCRE в 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"

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

88 голосов
/ 04 января 2012

Абсолютно самый простой способ сделать это с помощью basename()

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

Который напечатает

9393903

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

24 голосов
/ 13 сентября 2011

Вы можете использовать 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+)$/ (где .* означает ноль или более символов (которые не являются символом новой строки) ).

15 голосов
/ 14 мая 2013

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

<?php

$url = "http://foobar.com/foo/bar/1?baz=qux#fragment/foo";
$lastSegment = basename(parse_url($url, PHP_URL_PATH));
12 голосов
/ 13 сентября 2011
$id = strrchr($url,"/");
$id = substr($id,1,strlen($id));

Вот описание функции strrchr: http://www.php.net/manual/en/function.strrchr.php

Надеюсь, это полезно!

4 голосов
/ 13 сентября 2011

Другой вариант:

$urlarray=explode("/",$url);
$end=$urlarray[count($urlarray)-1];
3 голосов
/ 21 мая 2016

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

от DisgruntledGoat

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

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

2 голосов
/ 10 августа 2015

Один лайнер: $page_path = end(explode('/', trim($_SERVER['REQUEST_URI'], '/')));

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

1 голос
/ 25 апреля 2014

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

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

это даст вам строку после первого "/" справа.

0 голосов
/ 15 июля 2015
$mylink = $_SERVER['PHP_SELF'];
$link_array = explode('/',$mylink);
echo $lastpart = end($link_array);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...