Удаление специальных символов из имени файла

Я делаю сайт, где люди могут загружать изображения. Однако, когда конечные пользователи загружают изображение, содержащее специальные символы или иностранный символ, изображение загружается, но его нельзя отобразить на веб-сайте, так как изображение не существует на сервере.

Я вижу много людей, отвечающих на другой пост, говоря, что мне нужно использовать preg_replace

Но дело в том, что я не знаю, как его использовать. Как бы я использовал это в моем коде.

Вот мой метод контроллера:

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;
}

2

Решение

С помощью preg замените:

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

Это удалит все символы, которые не являются буквой (a-z), числом (0-9) или тире, подчеркиванием или точкой (мы хотим сохранить расширение файла). i Флаг в конце делает регистр нечувствительным к регистру.

Обновить

Чтобы сделать выражение короче, вы можете заменить a-z0-9\_-часть со словом токен \w,
Шаблон будет тогда: /[^\w\-\.]/, Здесь нам не нужны i флаг, так как слово токен обрабатывает это для нас.

11

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]