You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

PHP如何从带参数的图片URL中获取文件扩展名?

问题描述

我有一个带可变查询参数(比如高度h、宽度w)的图片URL,想要从中提取文件扩展名。作为PHP新手,我试了两段代码但没得到想要的结果,希望能得到帮助:

第一段代码:

$imageURL = 'https://digitalcontent.api.tesco.com/v2/media/ghs/be29dc93-727d-499f-b23d-a74a92989ad2/2dc3074e-2142-4625-a91e-29edd9da68bc_711691422.jpeg?h=225&w=225';
$ext = pathinfo($imageURL, PATHINFO_EXTENSION);
echo $ext;

第二段代码:

$ext = pathinfo($imageURL, PATHINFO_EXTENSION);
$ext2 = preg_replace('/^\.*\.([^.]+)$/D', '$1', $imageURL);
echo $ext;
echo $ext2;

解决方案

你的代码问题在于:直接用pathinfo处理带查询参数的URL时,它会把?及后面的内容当成文件名的一部分;而第二段的正则表达式匹配规则完全不适合当前URL结构。下面是几种实用的解决方法:

方法1:先剥离查询参数再用pathinfo

通过parse_url提取URL的路径部分,再用pathinfo获取扩展名,这是最稳妥的方式:

$imageURL = 'https://digitalcontent.api.tesco.com/v2/media/ghs/be29dc93-727d-499f-b23d-a74a92989ad2/2dc3074e-2142-4625-a91e-29edd9da68bc_711691422.jpeg?h=225&w=225';
// 解析URL,单独提取路径部分
$urlPath = parse_url($imageURL, PHP_URL_PATH);
// 从路径中获取扩展名
$ext = pathinfo($urlPath, PATHINFO_EXTENSION);
echo $ext; // 输出:jpeg

方法2:正则表达式直接匹配

用正则精准匹配最后一个.到?(或URL结尾)之间的内容:

$imageURL = 'https://digitalcontent.api.tesco.com/v2/media/ghs/be29dc93-727d-499f-b23d-a74a92989ad2/2dc3074e-2142-4625-a91e-29edd9da68bc_711691422.jpeg?h=225&w=225';
preg_match('/\.([^.?]+)(?:\?|$)/', $imageURL, $matches);
$ext = isset($matches[1]) ? $matches[1] : '';
echo $ext; // 输出:jpeg

方法3:用strtok和explode拆分

先截断查询参数,再通过拆分文件名获取扩展名:

$imageURL = 'https://digitalcontent.api.tesco.com/v2/media/ghs/be29dc93-727d-499f-b23d-a74a92989ad2/2dc3074e-2142-4625-a91e-29edd9da68bc_711691422.jpeg?h=225&w=225';
// 截断?及后面的内容
$urlWithoutQuery = strtok($imageURL, '?');
// 拆分文件名并取最后一段
$parts = explode('.', basename($urlWithoutQuery));
$ext = end($parts);
echo $ext; // 输出:jpeg

内容的提问来源于stack exchange,提问作者Kevin Deery

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.18 04:48:32