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