<;输入类型=“;文件“;运行良好,但当文件名称中有一些空格时,PHP将失败


<input type="file" works good but when the file has some blanks in the name PHP failes

input type=file

提示并允许我们选择多个文件作为"文件对象"。其中一个文件对象属性是"name",但它是只读的。当我在JS中使用带有AJAX和FormData的PHP时,它工作得很好,但当文件名中有空格时,它有时会使用一两个空格,但大多数时候都会失败。现在在PHP中,它是成对的

$_FILES['uploaded_file']['name'](大小,键入其他值)

 and isset($_FILES['uploaded_file']) 

失败,否则我将使用str_replace(" ","%",$name);,但isset失败(仍在试图找出原因?)

  1. 是否可以修改输入类型=文件所选文件对象的名称
  2. 如果没有解决方案1,如何能够通过isset($_FILES['uploaded_file'])障碍在PHP中做str_replace(" ","%",$name)

不确定我是否遵循,但主要问题似乎是文件名中的空格?向表单中添加enctype=multipart/form数据可能会有所帮助。否则,我会获取文件名的值,并通过其中一个替换函数对其进行过滤,将空格转换为其他内容,如

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

然后让脚本继续。空格通常读作%20。

我确信PHP足够聪明,可以上传包含空格的文件名。

另外,你说它有时有效,一定是其他原因引起了问题。

您可以使用is_uploaded_file()检查上传,并使用转储$_FILE调试

if (!is_uploaded_file($_FILES['uploaded_file']['tmp_name'])) {
    print_r($_FILES)
}

如果存在,您将看到错误