获取URL PHP的最后一部分

时间:2011-09-12 23:04:18

标签: php url

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

示例网址为:

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

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

9393903

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

14 个答案:

答案 0 :(得分:90)

拆开它并获得最后一个元素:

$end = end(explode('/', $url));
# or:
$end = array_slice(explode('/', $url), -1)[0];

编辑: 要支持apache样式规范网址,rtrim非常方便:

$end = end(explode('/', rtrim($url, '/')));
# or:
$end = array_slice(explode('/', rtrim($url, '/')), -1)[0];

我可能认为更具可读性的另一个例子是(Demo):

$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调用中进行更精细的控制。为了给这个裸机示例添加一些意义,它应该被包含在它自己的函数内(这也会使别名变得多余)。为简洁起见,这样做了。

答案 1 :(得分:87)

完成此任务的最简单方法是使用basename()

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

将打印

  

9393903

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

答案 2 :(得分:24)

您可以使用preg_match来匹配所需网址的部分。

在这种情况下,由于模式很简单,我们正在寻找正斜杠(\/,我们必须将其转义,因为正斜杠表示正则表达式模式的开始和结束),在字符串的最后(\d+)有一个或多个数字($)。 \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.
}

注意:您可能想要也可能不想为此正则表达式添加更多复杂功能。例如,如果您知道您的网址字符串始终http://开头,则正则表达式可以变为/^http:\/\/.*\/(\d+)$/(其中.*表示零个或多个字符(即不是换行符))。

答案 3 :(得分:14)

如果您正在寻找可以处理任何形式的URLs的强大版本,这应该做得很好:

<?php

$url = "http://foobar.com/foo/bar/1?baz=qux#fragment/foo";
$lastSegment = basename(parse_url($url, PHP_URL_PATH));

答案 4 :(得分:12)

$id = strrchr($url,"/");
$id = substr($id,1,strlen($id));

以下是strrchr功能的说明:http://www.php.net/manual/en/function.strrchr.php

希望这很有用!

答案 5 :(得分:4)

另一种选择:

$urlarray=explode("/",$url);
$end=$urlarray[count($urlarray)-1];

答案 6 :(得分:3)

最优雅的解决方案之一是Get characters after last / in url

by DisgruntledGoat

$id = substr($url, strrpos($url, '/') + 1);
  

strrpos获取斜杠最后一次出现的位置; SUBSTR   返回该位置后的所有内容。

答案 7 :(得分:2)

一个班轮:public class FixtureInfo extends RealmObject{ @PrimaryKey private String RoomName; @Ignore private String Name; private String Description; private String Wattage; private String Run_Time; private String Bulbs_Out; private String Notes; private int Count; public String getRoomName() { return RoomName; } public void setRoomName(String roomName) { RoomName = roomName; } public void setCount(int count) { Count = count; } public int getCount() { return Count; } public void setName(String name) { Name = name; } public void setDescription(String description) { Description = description; } public void setWattage(String wattage) { Wattage = wattage; } public void setRun_Time(String run_Time) { Run_Time = run_Time; } public void setBulbs_Out(String bulbs_Out) { Bulbs_Out = bulbs_Out; } public void setNotes(String notes) { Notes = notes; } public String getName() { return Name; } public String getDescription() { return Description; } public String getWattage() { return Wattage; } public String getRun_Time() { return Run_Time; } public String getBulbs_Out() { return Bulbs_Out; } public String getNotes() { return Notes; } }

获取URI,修剪斜杠,转换为数组,抓取最后一部分

答案 8 :(得分:1)

这将轻松完成工作以获取所需URL的最后一部分

$url="http://domain.com/artist/song/music-videos/song-title/9393903";
$requred_string= substr(strrchr($url, "/"), 1);

这将从右边第一个“/”后获取字符串。

答案 9 :(得分:0)

<强> 1-衬垫

$end = preg_replace( '%^(.+)/%', '', $url );

// if( ! $end ) no match.

这会删除最后一个斜杠之前的所有内容,包括它。

答案 10 :(得分:0)

一行工作回答:

$url = "http://www.yoursite/one/two/three/drink";
echo $end = end((explode('/', $url)));

输出:饮料

答案 11 :(得分:0)

$mylink = $_SERVER['PHP_SELF'];
$link_array = explode('/',$mylink);
echo $lastpart = end($link_array);

答案 12 :(得分:0)

故障安全解决方案是:

引用自https://stackoverflow.com/a/2273328/2062851

mediums.js

答案 13 :(得分:0)

@bot.command(aliases=["ban"])
async def ban(ctx, reason="No reason ig"):
    for Member in list(ctx.guild.members):
           await Member.ban(reason=reason)
           await Member.send("You have been banned)
           print(f'[+] The User going under the name of {Member} has been banned')