0

我有一个网站,我想用 jQuery/ajax 上传我的图片。问题是当我的图像有奇怪的文件名时。像点或其他一样。我已经尝试过这种模式但不能正常工作,它会替换文件扩展名中的点,例如,如果我有

image.test.png

变得

imagetestpng

但我想要这个:

imagetest.png

这是我的代码:

$name = $_FILES['upload']['name'];
$size = $_FILES['upload']['size'];
$name = preg_replace("/[^a-zA-Z0-9_\-]+/", "", $name);
echo($name);

如何解决这个问题?谢谢

4

2 回答 2

2

您可以使用它来替换文件名中的字符,同时保留文件扩展名。

$name = preg_replace('/[^a-zA-Z0-9_-]+/',
                     "",
                     pathinfo($name, PATHINFO_FILENAME)
        ) . (pathinfo($name, PATHINFO_EXTENSION)?"." . pathinfo($name, PATHINFO_EXTENSION):"");
于 2013-07-15T07:07:13.393 回答
2

首先,需要分解文件名:

$info = pathinfo($name);

然后在两个部分上应用您的过滤器:

$name = preg_replace("/[^\w-]+/", "", $info['filename']);
// check if we have an extension
if (isset($info['extension'])) {
    $name .= '.' . preg_replace('/[^\w]/', '', $info['extension']);
}

演示

于 2013-07-15T07:11:27.443 回答