gpt4 book ai didi

php - 从文件名中删除特殊字符

转载 作者:行者123 更新时间:2023-12-02 05:32:49 28 4
gpt4 key购买 nike

我正在制作一个人们可以上传图片的网站。但是当最终用户上传包含特殊字符或外来字符的图片时,图片确实上传了,但无法在网站上显示,就像该图片在服务器上不存在一样。

我看到很多人在另一个帖子上回答说我需要使用 preg_replace
但问题是,我真的不知道如何使用它。我将如何在我的代码中使用它。

这是我的 Controller 方法:

public function upload(Requests\CreatePostsRequest $request)
{
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES['fileToUpload']["name"]);
$uploadOk = 1;
$findme = ".";
$pos = strpos($target_file, $findme);
//echo $target_file;
//dd($_POST);
echo ini_get('upload_max_filesize');
echo $_FILES["fileToUpload"]["error"];
$imageFileType = strtolower(substr($target_file,$pos+1));
if(isset($_POST["submit"])) {
$check = getimagesize($_FILES["fileToUpload"]["tmp_name"]);
//$check = true;
//dd($check);
if($check !== false) {
echo "File is an image - " . $check["mime"] . ".";
$uploadOk = 1;
} else {
echo "File is not an image.";
$uploadOk = 0;
}
}
$filecheck = 0;
$orgFileName = $target_file;
while (file_exists($target_file)) {
$target_file = substr($orgFileName,0,$pos).$filecheck.substr($orgFileName,$pos);
$filecheck++;

$uploadOk = 1;
}

if ($_FILES["fileToUpload"]["size"] > 500000000*8) {
echo "Sorry, your file is too large.";
$uploadOk = 0;
}

if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg"
&& $imageFileType != "gif" ) {
echo "Sorry, only JPG, JPEG, PNG & GIF files are allowed.";
echo $imageFileType;
$uploadOk = 0;
}

if ($uploadOk == 0) {
echo "Sorry, your file was not uploaded.";

} else {
if (move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target_file)) {
echo "The file ". basename( $_FILES["fileToUpload"]["name"]). " has been uploaded.";

$post = new Posts($request->all());
$post->fileToUpload = $target_file;
Auth::user()->posts()->save($post);
} else {
echo "Sorry, there was an error uploading your file.";
}
}
return redirect('');
echo $target_file;
}

最佳答案

使用 preg 替换:

$target_file = $target_dir . preg_replace("/[^a-z0-9\_\-\.]/i", '', basename($_FILES['fileToUpload']["name"]));

这将删除所有不是字母 (a-z)、数字 (0-9) 或破折号、下划线或点(我们希望保留文件扩展名)的字符。 i标志最后使匹配不区分大小写。

更新

为了使表达式更短,您可以替换 a-z0-9\_ -部分带有单词token \w .
模式将是: /[^\w\-\.]/ .这里我们不需要 i标志,因为单词 token 为我们处理。

关于php - 从文件名中删除特殊字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33511235/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com