获取 URL PHP 的最后一部分
我只是想知道如何使用PHP提取URL的最后一部分。
示例网址为:
http://domain.example/artist/song/music-videos/song-title/9393903
现在,我如何使用PHP提取最终部分?
9393903
URL 中始终存在相同数量的变量,并且 id 始终位于末尾。
我只是想知道如何使用PHP提取URL的最后一部分。
示例网址为:
http://domain.example/artist/song/music-videos/song-title/9393903
现在,我如何使用PHP提取最终部分?
9393903
URL 中始终存在相同数量的变量,并且 id 始终位于末尾。
实现此目的的绝对最简单的方法是使用basename()
echo basename('http://domain.example/artist/song/music-videos/song-title/9393903');
这将打印
9393903
当然,如果最后有一个查询字符串,它将包含在返回值中,在这种情况下,接受的答案是更好的解决方案。
将其拆分并获取最后一个元素:
$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 的路径上工作。
还有另一个编辑(几年后),规范化和简单的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"
这非常粗糙,但显示了如何通过PCRE正则表达式模式将其包装在对更细粒度控制的调用中。为了给这个裸机示例添加一些意义,它应该被包装在它自己的函数中(这也会使混叠变得多余)。为了简洁起见,只是以这种方式呈现。preg_match