Получить последнюю часть 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));
Ответ 5
$id = strrchr($url,"/");
$id = substr($id,1,strlen($id));
Вот описание функции strrchr
: http://www.php.net/manual/en/function.strrchr.php
Надеюсь, что это полезно!
Ответ 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);