获取URL PHP的最后一部分
我只是想知道如何使用PHP提取URL的最后一部分 示例URL为:获取URL PHP的最后一部分,php,url,Php,Url,我只是想知道如何使用PHP提取URL的最后一部分 示例URL为: http://domain.com/artist/song/music-videos/song-title/9393903 现在如何使用PHP提取最后一部分 9393903 URL中始终有相同数量的变量,并且id始终位于末尾。您可以使用它来匹配所需的URL部分 在本例中,由于模式很简单,因此我们要查找正斜杠(\/,我们必须对其进行转义,因为正斜杠表示正则表达式模式的开始和结束),以及字符串末尾的一个或多个数字(\d+)。\d+
http://domain.com/artist/song/music-videos/song-title/9393903
现在如何使用PHP提取最后一部分
9393903
URL中始终有相同数量的变量,并且id始终位于末尾。您可以使用它来匹配所需的URL部分
在本例中,由于模式很简单,因此我们要查找正斜杠(\/
,我们必须对其进行转义,因为正斜杠表示正则表达式模式的开始和结束),以及字符串末尾的一个或多个数字(\d+
)。\d+
周围的括号用于捕获我们想要的片段:即结尾。然后,我们将所需的结尾($end
)分配给$matches[1]
(而不是$matches[0]
,因为这与$url
(即整个字符串)相同)
注意:您可能不想给这个正则表达式添加更复杂的内容。例如,如果您知道URL字符串总是以http://
开头,则正则表达式可以变成/^http:\/\/.*/(\d+)$/
(其中*
表示零个或多个字符(不是换行符))
以下是strrchr
功能的说明:
希望有用 另一种选择:
$urlarray=explode("/",$url);
$end=$urlarray[count($urlarray)-1];
将其拆分并获取最后一个元素:
$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];
另一个我认为更具可读性的例子是(): 本例还考虑到仅在URL路径上工作
还有另一个编辑(几年后),包括规范化和简单的UTF-8替代使用(通过PHP中的PCRE正则表达式):
要做到这一点,最简单的方法是 哪个会打印 93903
当然,如果最后有一个查询字符串,它将包含在返回值中,在这种情况下,接受的答案是更好的解决方案。如果您正在寻找一个能够处理任何形式的查询的健壮版本,这应该可以很好地做到:
<?php
$url = "http://foobar.com/foo/bar/1?baz=qux#fragment/foo";
$lastSegment = basename(parse_url($url, PHP_URL_PATH));
这将很容易获得所需URL的最后一部分
$url="http://domain.com/artist/song/music-videos/song-title/9393903";
$requred_string= substr(strrchr($url, "/"), 1);
这将获得右起第一个“/”之后的字符串。1行
$end = preg_replace( '%^(.+)/%', '', $url );
// if( ! $end ) no match.
这只是删除最后一个斜杠之前的所有内容,包括它。一行工作答案:
$url = "http://www.yoursite/one/two/three/drink";
echo $end = end((explode('/', $url)));
输出:饮料$mylink=$\u服务器['PHP\u SELF'];
$link_array=explode('/',$mylink);
echo$lastpart=end($link\u数组);
一行:$page\u path=end(分解('/',修剪($\u服务器['REQUEST\u URI'],'/'))代码>
获取URI、修剪斜杠、转换为数组、抓取最后一部分最优雅的解决方案之一就在这里
心怀不满
$id = substr($url, strrpos($url, '/') + 1);
strrpos获取斜杠最后一次出现的位置;substr
返回该位置之后的所有内容
故障安全解决方案是:
引用自
函数getLastPathSegment($url){
$path=parse_url($url,PHP_url_path);//从整个url获取路径
$PATHTTRIM=trim($path,“/”);//不使用前导或尾随斜杠进行规格化
$pathTokens=explode(“/”,$pathTrimmed);//获取由斜杠分隔的段
if(substr($path,-1)!='/')){
数组_pop($pathTokens);
}
return end($pathTokens);//获取最后一段
}
echo getLastPathSegment($_服务器['REQUEST_URI'])//9393903
注意漏洞:这段代码利用了PHP中可能被视为bug的东西。我会更新答案。@hakre+1,但如果$url
中有尾随斜杠,您将一无所获。最好先使用删除空元素-$pathFragments=array_filter(explode(“/”,$path))
@jibiel:或者执行rtrim
-boogie,我编辑了答案,请参见现在的第三个代码示例。如果我不得不猜测,此解决方案可能在basename
/str*
解决方案和preg
解决方案之间执行。虽然这是一种直观的简单方法,但它会带来一些运行时开销。@hakre演示链接已断开。请把它修好。也可以在1行中使用preg_替换完成。我会补充一个答案。这个解决方案可能是最慢的;不是恨,只是说。example.com/123/my-slug/1235怎么样?你需要1235吗?它对字符串有效。但是,如何从URL获取最后一部分呢?此解决方案可能是最快的解决方案,如果适用,可以保存basename()
解决方案。此解决方案非常有用且非常简单。此解决方案对我非常有帮助。牙齿是我最喜欢的解决方案。健壮、高效、简洁。比其他方法简单得多。记住:如果末尾有一个尾随斜杠,这将失败。参见hakre及其编辑的解决方案中的注释。看看Peter的解决方案:basename()函数就是为此而设计的。如果你问我是的,最好的答案是!绝对简单有效。经过多次正则表达式之后,我得出了这个答案。为什么我没早点找到这个。简单明了。我从url中只能得到两杯/三杯/饮料吗?导致当前PHP出现错误(2020年1月):
<?php
$url = "http://foobar.com/foo/bar/1?baz=qux#fragment/foo";
$lastSegment = basename(parse_url($url, PHP_URL_PATH));
$url="http://domain.com/artist/song/music-videos/song-title/9393903";
$requred_string= substr(strrchr($url, "/"), 1);
$end = preg_replace( '%^(.+)/%', '', $url );
// if( ! $end ) no match.
$url = "http://www.yoursite/one/two/three/drink";
echo $end = end((explode('/', $url)));
$id = substr($url, strrpos($url, '/') + 1);