PHP - move_uploaded_file заменяет пробелы на% 20 - PullRequest
0 голосов
/ 03 октября 2019

Я использую move_uploaded_file для загрузки файла, но когда я загружаю файл с пробелами, он не заменяется на% 20, а затем я застреваю с именем файла с пробелами, как мне это исправить?

Вот мой код:

$target_dir = "uploads/";
        $target_file = $target_dir . basename($_FILES["logoHeader"]["name"]);
        $imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));


        if(isset($_POST["submit"])) {
            $check = getimagesize($_FILES["logoHeader"]["tmp_name"]);
            if($check === false) {

                $error = 'File is not an image.';

                include('views/logos/index.php');

                break;

            }
        }

        if($imageFileType != "jpg" && $imageFileType != "png" && $imageFileType != "jpeg" && $imageFileType != "gif" ) {

            $error = 'Sorry, only JPG, JPEG, PNG & GIF files are allowed.';

            include('views/logos/index.php');

            break;

        }

        if (move_uploaded_file($_FILES["logoHeader"]["tmp_name"], $target_file)) {

            $error = 'Image has been uploaded.';

        }
        else
        {
            $error = 'Sorry, there was an error uploading your file.';

            include('views/logos/index.php');

            break;
        }

1 Ответ

0 голосов
/ 03 октября 2019
$target_dir = "uploads/";
$target_file = $target_dir . basename($_FILES["logoHeader"]["name"]);
//new line
$target_file = checkName($target_file);
//end new line
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));
//your code

и добавьте функцию checkName

function checkName($name){
    if(preg_match("`^[-0-9A-Z_\.]+$`i",$name)){
        return $name;
    }else{
        $name = str_replace(' ', '%20', $name);
        return $name;
    }

Но вы все равно не избавлены от других «непонятных» персонажей. Как вы дадите файл, если его имя содержит символы, которые не разрешены для URL? Например: ÆÞΔΦÜЩЫž.jpg

Попробуйте найти больше информации о URL slug;)

...