我只是想知道如何使用PHP提取URL的最后一部分.
示例网址为:
http://domain.com/artist/song/music-videos/song-title/9393903
Run Code Online (Sandbox Code Playgroud)
现在我如何使用PHP提取最终部分?
9393903
Run Code Online (Sandbox Code Playgroud)
URL中始终存在相同数量的变量,并且id始终位于末尾.
nik*_*org 101
实现这一目标的绝对最简单的方法是 basename()
echo basename('http://domain.com/artist/song/music-videos/song-title/9393903');
Run Code Online (Sandbox Code Playgroud)
哪个会打印
9393903
当然,如果最后有一个查询字符串,它将包含在返回值中,在这种情况下,接受的答案是更好的解决方案.
hak*_*kre 91
将它拆开并获得最后一个元素:
$end = end(explode('/', $url));
# or:
$end = array_slice(explode('/', $url), -1)[0];
Run Code Online (Sandbox Code Playgroud)
编辑:要支持apache样式规范的URL,rtrim
很方便:
$end = end(explode('/', rtrim($url, '/')));
# or:
$end = array_slice(explode('/', rtrim($url, '/')), -1)[0];
Run Code Online (Sandbox Code Playgroud)
可能我认为更具可读性的另一个例子是(Demo):
$path = parse_url($url, PHP_URL_PATH);
$pathFragments = explode('/', $path);
$end = end($pathFragments);
Run Code Online (Sandbox Code Playgroud)
此示例还考虑到仅处理URL的路径.
还包括另一个编辑(几年后),规范化和简单的UTF-8替代使用(通过PHP中的PCRE正则表达式):
<?php
use function call_user_func as f;
use UnexpectedValueException as e;
$url = 'http://example.com/artist/song/music-videos/song-title/9393903';
$result = preg_match('(([^/]*)/*$)', $url, $m)
? $m[1]
: f(function() use ($url) {throw new e("pattern on '$url'");})
;
var_dump($result); # string(7) "9393903"
Run Code Online (Sandbox Code Playgroud)
这是非常粗略的,但展示了如何preg_match
通过PCRE正则表达式模式调用这个以进行更细粒度的控制.添加一些感此裸机例如,应该它自己的函数(其也会使走样多余)内缠绕.为了简洁起见,这样做了.
小智 24
您可以使用preg_match
以匹配所需的URL部分.
在这种情况下,由于模式很简单,我们正在寻找正斜杠(\/
我们必须转义它,因为正斜杠表示正则表达式模式的开始和结束),以及一个或多个数字(\d+
)at string($
)的最后一部分.围绕它的括号\d+
用于捕获我们想要的那块:即结束.然后我们将我们想要的结束分配$end
给$matches[1]
(不$matches[0]
,因为它与$url
(即整个字符串)相同).
$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.
}
Run Code Online (Sandbox Code Playgroud)
注意: 您可能想要也可能不想为此正则表达式添加更复杂的内容.例如,如果您知道您的URL字符串将始终以http://
,则正则表达式可以变为/^http:\/\/.*\/(\d+)$/
(其中.*
表示零个或多个字符(不是换行符)).
Pet*_*ter 15
如果您正在寻找可以处理任何形式的URL的健壮版本,这应该做得很好:
<?php
$url = "http://foobar.com/foo/bar/1?baz=qux#fragment/foo";
$lastSegment = basename(parse_url($url, PHP_URL_PATH));
Run Code Online (Sandbox Code Playgroud)
Tam*_*ash 12
$id = strrchr($url,"/");
$id = substr($id,1,strlen($id));
Run Code Online (Sandbox Code Playgroud)
以下是该strrchr
功能的描述:http://www.php.net/manual/en/function.strrchr.php
希望这很有用!
另外一个选项:
$urlarray=explode("/",$url);
$end=$urlarray[count($urlarray)-1];
Run Code Online (Sandbox Code Playgroud)
最优雅的解决方案之一是在 url 中的最后一个 / 之后获取字符
通过不满的山羊
$id = substr($url, strrpos($url, '/') + 1);
Run Code Online (Sandbox Code Playgroud)
strrpos 获取斜杠最后一次出现的位置;substr 返回该位置之后的所有内容。