Мне просто интересно, как я могу извлечь последнюю часть 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);