获取URL PHP的最后部分

我只是想知道如何使用PHP提取URL的最后部分。

示例url是:

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

现在我怎样才能提取使用PHP的最后一部分?

 9393903 

在URL中总是有相同数量的variables,而ID总是在最后。

您可以使用preg_match来匹配所需的URL部分。

在这种情况下,由于模式很简单,我们正在寻找一个正斜杠( \/和我们必须逃避它,因为正斜杠表示正则expression式模式的开始和结束),以及一个或多个数字( \d+ )在string( $ )的最后。 \d+周围的括号用于捕捉我们想要的作品:即结束。 然后我们把我们想要的结尾( $end )分配给$matches[1] (不是$matches[0] ,因为它与$url (即整个string)相同)。

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

注意:您可能会也可能不想为这个正则expression式添加一些更复杂的内容。 例如,如果您知道您的URLstring始终http://开头,则正则expression式可以变成/ /^http:\/\/.*\/(\d+)$/ http:// /^http:\/\/.*\/(\d+)$/ ( /^http:\/\/.*\/(\d+)$/ (其中.*表示零个或多个字符(这不是换行符))。

拆分它并得到最后一个元素:

 $end = end(explode('/', $url)); # or: $end = array_slice(explode('/', $url), -1)[0]; 

编辑:为了支持Apache风格的规范url, 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的path。

完成这个最简单的方法是用basename()

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

哪个会打印

9393903

当然,如果最后有一个查询string,它将被包含在返回的值中,在这种情况下,接受的答案是一个更好的解决scheme。

如果你正在寻找一个强大的版本,可以处理任何forms的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 : strrchr

希望这是有用的!

最优雅的解决scheme之一是在这里获取最后/在url后的字符

由DisgruntledGoat

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

strrpos获取最后一次斜杠的位置; substr返回该位置后的所有内容。

另一种select:

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

一个class轮: $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); 

这将会在右边第一个“/”之后得到你的string。

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