PHP-移动上传的文件将空格替换为%20

PHP-移动上传的文件将空格替换为%20,php,file-upload,spaces,Php,File Upload,Spaces,我正在使用move_uploaded_file上载文件,但当我上载一个带有空格的文件时,它不会替换为%20,然后我会被文件名和空格卡住,如何修复此问题 这是我的密码: $target_dir = "uploads/"; $target_file = $target_dir . basename($_FILES["logoHeader"]["name"]); $imageFileType = strtolower(pathinfo($target_file,PATH

我正在使用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;
        }
并添加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;)的更多信息

%20
在从浏览器到服务器的通信过程中只是URL编码的一部分,它不应该保存在应用程序中。在我将文件路径保存到数据库中之后,我应该在数据库中保存吗?不,它只用于浏览器到服务器的通信,不是其他任何地方。这是客户端的请求……如果您确实希望在文件名中使用,
$target\u file=str\u replace('''%20',$target\u file)
function checkName($name){
    if(preg_match("`^[-0-9A-Z_\.]+$`i",$name)){
        return $name;
    }else{
        $name = str_replace(' ', '%20', $name);
        return $name;
    }