2010-02-16 3 views
23

Я хотел бы получить последний отрезок пути в URL:Как получить последний путь в URL-адресе?

  • http://blabla/bla/wce/news.php или
  • http://blabla/blablabla/dut2a/news.php

Например, в этих двух ссылок, я хочу, чтобы получить отрезок пути: «ЗЦЕ 'и' dut2a '.

Я попытался использовать $_SERVER['REQUEST_URI'], но я получаю весь URL-адрес.

ответ

48

Try:

$url = 'http://blabla/blablabla/dut2a/news.php'; 
$tokens = explode('/', $url); 
echo $tokens[sizeof($tokens)-2]; 

Предполагая, что $tokens имеет по крайней мере 2 элементов.

+0

bahamut100, Если это правильный ответ, вы должны принять его, нажав на белую галочку рядом с ним. –

+0

@ bahamut100, добро пожаловать. Хотя я бы пошел (и согласился) ответить alex. –

+0

@Bart K. Все в порядке, твоя работа будет выполнена! +1 – alex

25

Попробуйте это:

function getLastPathSegment($url) { 
    $path = parse_url($url, PHP_URL_PATH); // to get the path from a whole URL 
    $pathTrimmed = trim($path, '/'); // normalise with no leading or trailing slash 
    $pathTokens = explode('/', $pathTrimmed); // get segments delimited by a slash 

    if (substr($path, -1) !== '/') { 
     array_pop($pathTokens); 
    } 
    return end($pathTokens); // get the last segment 
} 

    echo getLastPathSegment($_SERVER['REQUEST_URI']); 

Я также протестировали его с несколькими URL-адресов из комментариев. Я должен буду предположить, что все пути заканчиваются косой чертой, потому что я не могу определить, является ли/bob каталогом или файлом. Предположим, что это файл, если он также имеет завершающую косую черту.

echo getLastPathSegment('http://server.com/bla/wce/news.php'); // wce 

echo getLastPathSegment('http://server.com/bla/wce/'); // wce 

echo getLastPathSegment('http://server.com/bla/wce'); // bla 
+1

+1 Для использования' parse_url', чтобы получить только URL-адрес. Но вам нужно сделать это с помощью '$ _SERVER ['REQUEST_URI']'. – Gumbo

+0

Я думал, что '$ _SERVER ['REQUEST_URI']' всегда возвращался с 'something/like/this'? – alex

+0

@alex: Нет, в PHP он также содержит запрос. Такой URL-адрес и URL-запрос (как в строке запроса HTTP). – Gumbo

9

Попробуйте это:

$parts = explode('/', 'your_url_here'); 
$last = end($parts); 
+1

Он может выйти из строя, если URL-адрес имеет завершающую косую черту – insign

21

легко

<?php 
echo basename(dirname($url)); 
?> 
+1

, возможно, раньше использовал фильтрацию по URL-адресу. Провалится на что-то вроде этого: http: //www.example.com/dir1/dir2/foo? Redirect = http: // anothersite.com/default.aspx' – andyk

+0

Я решил использовать его только с помощью basename() , Я получил второй уровень в «ретро» – insign

+0

'basename ($ _ SERVER ['PHP_SELF']);' сделал это для меня – Niels

1

Другое решение:

$last_slash = strrpos('/', $url); 
$last = substr($url, $last_slash); 

1: Получение последнего слеша позиции 2: получение подстроку между las т слэш и конец строки

Посмотрите здесь: TEST

1

Если вы хотите обработать абсолютный URL, то вы можете использовать parse_url() (он не работает с относительным URL).

$url = 'http://aplicaciones.org/wp-content/uploads/2011/09/skypevideo-500x361.jpg?arg=value#anchor'; 
print_r(parse_url($url)); 
$url_path = parse_url($url, PHP_URL_PATH); 
$parts = explode('/', $url_path); 
$last = end($parts); 
echo $last; 

Полный пример кода здесь: http://codepad.org/klqk5o29

0

Я написал себе немного функцию, чтобы получить последний реж/папку в URL. Он работает только с реальными/существующими URL-адресами, а не с теоретическими. В моем случае это всегда было так, поэтому ...

function uf_getLastDir($sUrl) 
{ 
    $sPath = parse_url($sUrl, PHP_URL_PATH); // parse URL and return only path component 
    $aPath = explode('/', trim($sPath, '/')); // remove surrounding "/" and return parts into array 
    end($aPath);        // last element of array 
    if (is_dir($sPath))      // if path points to dir 
     return current($aPath);    // return last element of array 
    if (is_file($sPath))      // if path points to file 
     return prev($aPath);     // return second to last element of array 
    return false;        // or return false 
} 

Работы для меня! Наслаждайтесь! И прелесть к предыдущим ответам !!!

Смежные вопросы