【发布时间】:2013-09-16 22:33:09
【问题描述】:
我现在正在寻找两个小时的解决方案,但我在网上找到的没有任何帮助...
我有一个带有上传表单的网络服务,它们都可以正常工作。我更喜欢 JS,我的整个服务都是用 HTML5、CSS3 和 JS 构建的……但我的上传表单是 PHP。我在网上找到了一个脚本,它有效,所以我很好。现在我意识到,当我想上传带有 ä、ö、ü 和 ß 等字符的文件时,我的服务存在问题。不幸的是,在德国,这些是我们语言中的常见字符,所以我必须用其他字符替换它们。
我到处看看,现在我的代码看起来像这样:
$files = $_FILES['fileselect'];
foreach ($files['error'] as $id => $err) {
if ($err == UPLOAD_ERR_OK) {
$fn = $files['name'][$id];
$search_array = array ('ä', 'ö', 'ü', 'ß');
$replace_array = array ('ae', 'oe', 'ue', 'ss');
$gfn = str_replace($search_array, $replace_array, $fn);
move_uploaded_file(
$files['tmp_name'][$id],
'bildtransfer/' . $gfn
);
echo "<p>Die Datei $gfn wurde hochgeladen.</p>";
}
}
上传本身仍然适用于文件,只要它们没有那些特殊字符。我的文件仍然有所有特殊字符,似乎没有任何替换?
我需要 preg_replace 而不是 str_replace 吗?我试过了,还是不行……
我希望你能帮助我吗?会很高兴!!! :)
【问题讨论】:
-
是否有特殊原因要替换文件名中的字符?
-
我建议你在门口停下来,只允许标准字符
[^a-zA-z0-9]使用if条件。 -
您可以使用的另一种方法是使用公共起始词重命名所有传入文件,然后使用服务器的时间戳为其设置唯一编号和/或
rand()。问题解决了,您不必担心非标准字符。即:incoming_file_2013_12_09_98372728883011093.xxx -
George:上传文件后,我将它们放入 SQL 数据库并使用 AJAX 在页面上列出它们......所以当我的文件名中有 äüö 或 ß 之类的字符时,它会引发错误 :( Fred:这将是一个可能的解决方案,但将它重命名会很棒......:S 无论如何,感谢您的回答!:) 编辑:感谢下一个解决方案,Fred! ;) 我会考虑的! :)
-
@Fabi 不客气。这就是我自己使用的,但我的文件没有插入数据库,只是一个简单的上传文件驻留在服务器上。干杯(编辑:您可以引用该文件并在
move_uploaded_file函数之前为其分配一个变量,以便显示用户计算机中选择的文件名)可以工作,非常有信心它会。
标签: php file-upload preg-replace str-replace