Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/url/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
获取URL PHP的最后一部分_Php_Url - Fatal编程技术网

获取URL PHP的最后一部分

获取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+

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

示例URL为:

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