上传文件中的空格替换为下划线

5

我有一个基本的脚本,可以让我的网站成员上传他们的作品简短的示例,供客户试听。

有些文件名带有空格,显然在试图播放样本时会导致问题。是否有一种方法可以在上传到临时目录和将文件移动到“样本”目录之间用下划线替换这些空格?

<?
            $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;
              }
              }
            }
?>
3个回答

14

在这行代码之后:

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

写:

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

hello  world.mp3 这样的文件名(两个空格)会变成 hello__world.mp3 (两个下划线),为了避免这种情况,您可以尝试使用以下方法:

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

str_replace(搜索, 替换, 目标字符串) - Explosion Pills
这段代码将文件名中的空格替换为下划线,是否同样适用于文件名中只有一个空格呢?$filename = preg_replace('/\s+/', '_', $filename); - shashikant kuswaha

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

为什么要使用addslashes呢?这似乎也太简单了吧,我有没有漏掉什么东西?


0

尝试;

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接