user1144510
user1144510

Reputation:

Replace Spaces with Underscores in Uploaded File

I have a basic script that allows my site members to upload short samples of their compositions for customers to listen to.

Some file names have spaces which obviously causes problems when trying to play the samples. Is there a way to replace these spaces with underscores between uploading to the temp directory and moving the file to the 'samples' directory?

<?
            $url = "http://domain.com/uploads/samples/";
            //define the upload path
            $uploadpath = "/home/public_html/uploads/samples";
            //check if a file is uploaded
             if($_FILES['userfile']['name']) {
              $filename = trim(addslashes($_FILES['userfile']['name']));
            //move the file to final destination
              if(move_uploaded_file($_FILES['userfile']['tmp_name'],
            $uploadpath."/". $filename)) {

              echo "

    bla bla bla, the final html output

            ";

              } else{
                if ($_FILES['userfile']['error'] > 0)
              {
                   switch ($_FILES['userfile']['error'])
                {
                  case 1:  echo 'File exceeded upload_max_filesize';  break;
                  case 2:  echo 'File exceeded max_file_size';  break;
                  case 3:  echo 'File only partially uploaded';  break;
                  case 4:  echo 'No file uploaded';  break;
                }
                exit;
              }
              }
            }
?>

Upvotes: 5

Views: 17001

Answers (3)

Paolo Bergantino
Paolo Bergantino

Reputation: 488374

After this line:

$filename = trim(addslashes($_FILES['userfile']['name']));

Write:

$filename = str_replace(' ', '_', $filename);

A filename like hello  world.mp3 (two spaces) would come out as hello__world.mp3 (two underscores), to avoid this you could do this instead:

$filename = preg_replace('/\s+/', '_', $filename);

Upvotes: 14

Adam
Adam

Reputation: 1694

try;

$filename = trim(str_replace(" ","_", $_FILES['userfile']['name']));

Upvotes: 0

Explosion Pills
Explosion Pills

Reputation: 191729

$filename = str_replace(' ', '-', trim(addslashes($_FILES['userfile']['name'])));

Why addslashes though? This also seems a little too simple -- am I missing something?

Upvotes: 0

Related Questions