2010-02-16 75 views
23

Tôi muốn có được phân đoạn đường dẫn cuối cùng trong một URL:Cách lấy đường dẫn cuối cùng trong URL?

  • http://blabla/bla/wce/news.php hoặc
  • http://blabla/blablabla/dut2a/news.php

Ví dụ, trong hai URL này, tôi muốn để có được những đoạn đường nét: 'WCE ', và' dut2a '.

Tôi đã cố gắng sử dụng $_SERVER['REQUEST_URI'] nhưng tôi nhận được toàn bộ đường dẫn URL.

Trả lời

48

Hãy thử:

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

Giả sử $tokens có ít nhất 2 yếu tố.

+0

bahamut100, Nếu đây là câu trả lời đúng, thì bạn nên chấp nhận câu trả lời bằng cách nhấp vào dấu kiểm màu trắng bên cạnh. –

+0

@ bahamut100, bạn được chào đón. Mặc dù tôi muốn đi (và chấp nhận) câu trả lời của alex. –

+0

@Bart K. Không sao, bạn cũng sẽ hoàn thành công việc! +1 – alex

0
$arr = explode("/", $uri); 
25

Hãy thử điều này:

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']); 

Tôi cũng đã thử nghiệm nó với một vài URL từ các ý kiến. Tôi sẽ phải giả định rằng tất cả các đường dẫn kết thúc bằng một dấu gạch chéo, bởi vì tôi không thể xác định nếu/bob là một thư mục hoặc một tập tin. Điều này sẽ giả định nó là một tập tin, trừ khi nó có dấu gạch chéo.

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 Để sử dụng' parse_url' để chỉ nhận đường dẫn URL. Nhưng bạn cũng cần làm điều đó với '$ _SERVER ['REQUEST_URI']'. – Gumbo

+0

Tôi nghĩ '$ _SERVER ['REQUEST_URI']' luôn luôn quay trở lại với 'cái gì đó/như/này'? – alex

+0

@alex: Không, trong PHP nó cũng chứa truy vấn. Vì vậy, đường dẫn URL và truy vấn URL (như trong dòng yêu cầu HTTP). – Gumbo

9

Hãy thử điều này:

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

Nó có thể thất bại nếu URL có dấu gạch chéo – insign

21

nó rất dễ dàng

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

có thể sử dụng một số lọc trên url trước đó. Sẽ thất bại trên một cái gì đó như thế này http: //www.example.com/dir1/dir2/foo? Redirect = http: // anothersite.com/default.aspx' – andyk

+0

Tôi đã giải quyết nó chỉ bằng cách sử dụng tên(), theo cách của bạn , Tôi đã nhận được cấp độ thứ hai trong "retro" – insign

+0

'tên cơ sở ($ _ SERVER ['PHP_SELF']);' đã làm cho tôi – Niels

1

Một giải pháp:

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

1: nhận được dấu gạch chéo cuối cùng vị trí 2: nhận được chuỗi con giữa las t slash và cuối chuỗi

Look đây: TEST

1

Nếu bạn muốn xử lý một URL tuyệt đối, sau đó bạn có thể sử dụng parse_url() (nó không làm việc với các url tương đối).

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

Full mã ví dụ ở đây: http://codepad.org/klqk5o29

0

tôi đã viết bản thân mình một chức năng nhỏ để có được những dir cuối cùng/thư mục của một địa chỉ. Nó chỉ hoạt động với các url hiện tại/thực, không phải là các lý thuyết. Trong trường hợp của tôi, đó luôn là trường hợp, vì vậy ...

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 
} 

Làm việc cho tôi! Thưởng thức! Và kudo đến những câu trả lời trước !!!

Các vấn đề liên quan