PHP-如何删除扩展后的任何内容(jpg、png、gif、jpeg、svg等)

PHP-如何删除扩展后的任何内容(jpg、png、gif、jpeg、svg等),php,Php,我正在使用PHP7并尝试删除URL扩展后的任何内容 范例 https://website/sites/tag/filename/IMG25.jpg?iabc=gfds to https://website/sites/tag/filename/IMG25.jpg 或 或 我正在尝试这个函数 $clean_url = preg_replace( "/(.+\.(:?jpg|gif|jp2|png|bmp|jpeg|svg)).*$/", '',

我正在使用PHP7并尝试删除URL扩展后的任何内容

范例

    https://website/sites/tag/filename/IMG25.jpg?iabc=gfds
    to 
    https://website/sites/tag/filename/IMG25.jpg

我正在尝试这个函数

$clean_url = preg_replace(
    "/(.+\.(:?jpg|gif|jp2|png|bmp|jpeg|svg)).*$/",
    '',
    $filename
);

但此功能不起作用

您可以通过以下方式执行:

首先使用“?”作为分隔符分解url字符串,然后使用结果数组的第一个元素

explode('?', $url)[0];

我对您的正则表达式进行了一些调整,以便捕获组并将url仅替换为第一个组,如下所示:

$clean_url = preg_replace(
    "/(.+(\.(jpg|gif|jp2|png|bmp|jpeg|svg)))(.*)$/",
    '${1}',
    $url
);
所有情况下的示例代码:

<?php

$urls = [
    "https://website/sites/tag/filename/IMG25.png&iabc=gfds",
    "https://website/sites/tag/filename/IMG25.jpg?iabc=gfds",
    "https://website/sites/tag/filename/IMG25.jpeg&abc=gfds"
];


foreach ($urls as $url){
    $clean_url = preg_replace(
        "/(.+(\.(jpg|gif|jp2|png|bmp|jpeg|svg)))(.*)$/",
        '${1}',
        $url
    );

    echo $clean_url ."\n";

}

您想要的输出是什么?类似于“查看
parse_url
just explode on?”:
list($url,$qs)=explode(“?”,$url)Duplicate不是真正的副本,因为这个询问者不想专门删除查询字符串。我投票决定重新开放。你的解决方案对“?”后删除很好。但对我来说,我想删除扩展后的任何内容,而不是问号。你是对的,我的不好,将尝试考虑另一个解决方案。现在第一个答案似乎是正确的。我的问题是不删除“?”后的内容问号;我的问题是如何删除扩展示例后的内容。jpg&hg=gfdi我注意到在第二个和第三个示例中您有一个
&
,而在第一个示例中您有
,它必须对这两种情况都有效吗?我已经更新了答案,您能看一下吗?是的,它有效,非常感谢您的欢迎。
$clean_url = preg_replace(
    "/(.+(\.(jpg|gif|jp2|png|bmp|jpeg|svg)))(.*)$/",
    '${1}',
    $url
);
<?php

$urls = [
    "https://website/sites/tag/filename/IMG25.png&iabc=gfds",
    "https://website/sites/tag/filename/IMG25.jpg?iabc=gfds",
    "https://website/sites/tag/filename/IMG25.jpeg&abc=gfds"
];


foreach ($urls as $url){
    $clean_url = preg_replace(
        "/(.+(\.(jpg|gif|jp2|png|bmp|jpeg|svg)))(.*)$/",
        '${1}',
        $url
    );

    echo $clean_url ."\n";

}