获取 URL PHP 的最后一部分

2022-08-30 08:40:41

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

示例网址为:

http://domain.example/artist/song/music-videos/song-title/9393903

现在,我如何使用PHP提取最终部分?

9393903

URL 中始终存在相同数量的变量,并且 id 始终位于末尾。


答案 1

实现此目的的绝对最简单的方法是使用basename()

echo basename('http://domain.example/artist/song/music-videos/song-title/9393903');

这将打印

9393903

当然,如果最后有一个查询字符串,它将包含在返回值中,在这种情况下,接受的答案是更好的解决方案。


答案 2

将其拆分并获取最后一个元素:

$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


推荐