0

我正在编写一个图片上传脚本,并将常见的图片扩展名列入白名单。我需要能够获取文件的扩展名以确定它们是否在白名单中,但是我遇到了一些 URL 的问题。

这是一个例子:

http://pisces.bbystatic.com/image/BestBuy_US/images/products/5512/5512124_ra.jpg;canvasHeight=280;canvasWidth=280

我的代码:

echo pathinfo($url, PATHINFO_EXTENSION);

输出以下内容:

jpg;canvasHeight=280;canvasWidth=280

演示

我可以将我的代码更改为此,这解决了问题:

$parts = explode(';', pathinfo($url, PATHINFO_EXTENSION));
echo $parts[0];

演示

但是,我不知道这是否是最好的方法(一方面,因为其他网站可能使用不同的数据分隔符而不是分号);

有没有更好的办法?

编辑:可能值得注意的是,我尝试在这里上传图像作为测试(使用示例 URL)并且 StackOverflow 上传它没有问题。

4

1 回答 1

1

使用 pathinfo() 只会匹配http://google.com -> com. 先使用parse_url安全获取 URL 路径,然后使用 pathinfo 获取文件扩展名。

如果 URL 使用查询字符串(例如?foo=bar),那么该代码就足够了。但是鉴于您的示例,其中 URL 使用一些自定义格式而不是查询字符串,您可以使用 RegEx 仅选择$ext.

$url = 'http://pisces.bbystatic.com/image/BestBuy_US/images/products/5512/5512124_ra.jpg;canvasHeight=280;canvasWidth=280';
$ext = pathinfo(parse_url($url, PHP_URL_PATH), PATHINFO_EXTENSION);
if (!empty($ext)) {
    preg_match('/[a-zA-Z0-9]+/', $ext, $matches);
    $ext = $matches[0];
}

echo $ext;
于 2014-05-25T15:59:51.103 回答