我现在正在寻找一个解决方案两个小时,但我在网上找不到任何帮助......
我有一个带有上传表单的网络服务,两者都运行正常。我更喜欢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吗?我试了一下,但它也没用......
我希望你能帮助我吗?会很高兴!!! :)
答案 0 :(得分:0)
看起来你错误地使用了$ _FILES数组。任何错误都将存储在$_FILES['fileselect']['error']
中 - 不需要foreach
语句。
该文件的原始名称存储在$_FILES['fileselect']['name']
中,因此请尝试在str_replace()
电话中使用该名称:
$file = $_FILES['fileselect'];
if($file['error'] == UPLOAD_ERR_OK) {
$fn = $file['name'];
$search_array = array ('ä', 'ö', 'ü', 'ß');
$replace_array = array ('ae', 'oe', 'ue', 'ss');
$gfn = str_replace($search_array, $replace_array, $fn);
move_uploaded_file(
$file['tmp_name'],
'bildtransfer/' . $gfn
);
echo "<p>Die Datei $gfn wurde hochgeladen.</p>";
}
说实话,我不确定它为什么会起作用!阅读Handling file uploads上的PHP文档。
要解决此问题,以便您不必费心替换字符,请按照@aaron的建议,尝试告诉浏览器您在发送时使用的是UTF-8:
header('Content-Type: text/html; charset=utf-8');
答案 1 :(得分:0)
这可能是编码问题。尝试在标题中将编码类型更改为UTF-8。