Php 上载带有特殊字符的文件时出现问题
我编写了一个小的上传脚本,在我使用它时,它在任何情况下都能正常工作,但我总是从我的客户那里收到消息,他收到一个错误,当上传出错/不起作用时,我就死了() 我相信这是由他们使用的特殊字符造成的。因为他们是奥地利人,所以在他们的文件名中有像ÄÄöÜÜß这样的特殊字符。另外,它们在文件名中使用空格。 因此,我使用正则表达式将特殊字符替换为下划线(\ux)Php 上载带有特殊字符的文件时出现问题,php,file-upload,Php,File Upload,我编写了一个小的上传脚本,在我使用它时,它在任何情况下都能正常工作,但我总是从我的客户那里收到消息,他收到一个错误,当上传出错/不起作用时,我就死了() 我相信这是由他们使用的特殊字符造成的。因为他们是奥地利人,所以在他们的文件名中有像ÄÄöÜÜß这样的特殊字符。另外,它们在文件名中使用空格。 因此,我使用正则表达式将特殊字符替换为下划线(\ux) 如果错误不是由文件名中的特殊字符引起的,我不确定问题出在哪里。在这种情况下,函数返回FALSE: 如果文件名不是有效的上载文件,则不会执行任何操作
如果错误不是由文件名中的特殊字符引起的,我不确定问题出在哪里。在这种情况下,函数返回FALSE:
/[^a-zA-Z0-9\.]/s
筛选文件名,但这只会替换第一次出现的特殊字符,而不是全部。
尝试添加“g”修饰符:/[^a-zA-Z0-9\]/sg
我试过这个你的意思是
move\u uploaded\u file()
返回false
?在这种情况下,手册说它应该抛出一个警告。正则表达式工作正常。如果我上传一个名为“Dasöist groß.pdf”的文件,它会将其重命名为“Das_uuuuuuuuist_ugroß.pdf”。它不能是权限,因为这是一个Web表单,脚本由apache/www数据处理,并且由于我可以上传,他们应该能够上传到。但是已经谢谢了:)嗯。。。您能否检查$\u文件['yourfile']['error']==0
?如果是0,则上载进行得很顺利,但移动文件时出现问题,否则就是上载问题。如果失败,函数将给出一个错误,解释原因。。。添加错误报告(E\u ALL)代码>在文件顶部。我尝试了这个,但没有得到任何错误。我不能让我的客户每10分钟测试一次脚本。。。sry
$moveFile = function($tmpname,$name,$time) {
// the regex to resolve the special chars problem
$name = preg_replace('/[^a-zA-Z0-9\.]/s', '_', $name);
if (!move_uploaded_file($tmpname,'assets/siteContents/bewerbungen/'.$time.'_'.$name)) {
die('something went wrong while uploading');
}
};
// move application_files__image
$moveFile($_FILES['application_files__image']['tmp_name'],
$_FILES['application_files__image']['name'],
$time);
// move application_files__image
$moveFile($_FILES['application_files__cv']['tmp_name'],
$_FILES['application_files__cv']['name'],
$time);
// move application_files__certificates
if (count($_FILES['application_files__certificates']['name'])) {
foreach ($_FILES['application_files__certificates']['name'] as $i => $name) {
$moveFile($_FILES['application_files__certificates']['tmp_name'][$i],
$_FILES['application_files__certificates']['name'][$i],
$time);
$a_list[] = 'assets/siteContents/bewerbungen/'.$time.'_'.preg_replace('/[^a-zA-Z0-9\.]/s', '_',$_FILES['application_files__certificates']['name'][$i]);
}
}