0

我正在使用 Jquery 上传器将图像上传到我的网站。它使用一个名为uploadhandler.php 的文件来操作这些文件。在 uploadhandler.php 内部是以下函数,它似乎对文件名的格式等进行了更改。我遇到的问题是,如果我上传文件名中带有空格的文件,它似乎不会删除其中的空格文件名。有谁知道我如何编辑它以添加一个额外的命令来删除文件名中的任何空格,或者指出我如何做到这一点的正确方向?

 protected function trim_file_name($name, $type, $index, $content_range) {

    // Remove path information and dots around the filename, to prevent uploading

    // into different directories or replacing hidden system files.

    // Also remove control characters and spaces (\x00..\x20) around the filename:

    $file_name = trim(basename(stripslashes($name)), ".\x00..\x20");

    // Add missing file extension for known image types:

    if (strpos($file_name, '.') === false &&

        preg_match('/^image\/(gif|jpe?g|png)/', $type, $matches)) {

        $file_name .= '.'.$matches[1];

    }

    while(is_dir($this->get_upload_path($file_name))) {

        $file_name = $this->upcount_name($file_name);

    }

    $uploaded_bytes = $this->fix_integer_overflow(intval($content_range[1]));

    while(is_file($this->get_upload_path($file_name))) {

        if ($uploaded_bytes === $this->get_file_size(

                $this->get_upload_path($file_name))) {

            break;

        }

        $file_name = $this->upcount_name($file_name);

    }

    return $file_name;

}
4

1 回答 1

6

该行:

$file_name = trim(basename(stripslashes($name)), ".\x00..\x20");

将删除文件名“周围”的空格,例如“foo”,因为该x20位是空格。您可以直接在此行之后添加:

$file_name = str_replace(" ", "", $file_name);

就这么简单!还请记住,当您使用第二个参数时,trim()您会删除手册中列出的“默认”字符列表 ( http://php.net/trim ) 并将其替换为您自己的...

我还要指出,我永远不会使用浏览器给出的文件名$_FILES[$x]['name']......它只会打开太多的问题和可能性。完全避免该问题的一种技术可能是简单地使用文件内容md5()的或sha1()类似的,例如:

$file_name = md5_file($_FILES['your_file_tag_name']['tmp_name']);

这样理论上,文件中永远不会有空格或“脏”文件名……此外,如果用户上传了两个内容完全相同的文件,您只需检查文件是否存在,如果它已经存在,您已经拥有完全相同的文件。希望这会有所帮助,这一切都假设您正在上传文件,我不能 100% 确定您是。

于 2012-12-05T20:25:03.280 回答