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

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

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

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

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

 9393903 

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

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

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

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

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

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

Что будет печатать

9393903

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

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

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

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

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

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

от DisgruntledGoat

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

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

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

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

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

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

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

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

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

1-лайнер

 $end = preg_replace( '%^(.+)/%', '', $url ); // if( ! $end ) no match. 

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

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

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

Выход: пить

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