it-roy-ru.com

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

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

URL-адрес примера:

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

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

9393903

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

47
Belgin Fish

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

24
user554546

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

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

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


Еще одно edit (спустя годы), канонизация и простое альтернативное использование 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. Чтобы придать некоторый смысл этому голому металлическому примеру, он должен быть обернут внутри собственной функции (что также сделает излишним псевдоним). Просто представил этот способ для краткости.

87
hakre

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

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

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

9393903

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

81
nikc.org

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

<?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));

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

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

12
Tamer Shlash

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

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

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

disgruntledGoat

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

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

3
Robert Sinclair

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

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

2
Justin

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

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

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

1
XxANxX

Рабочий ответ в одну строку:

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

Результат: напиток

0
George Chalhoub

1 вкладыш

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

// if( ! $end ) no match.

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

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