0

我现在正在寻找两个小时的解决方案,但我在网上找到的没有任何帮助......

我有一个带有上传表单的网络服务,它们都可以正常工作。我更喜欢 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 吗?我试过了,但它也没有工作......

我希望你能帮帮我?会很高兴!!!:)

4

2 回答 2

0

可能是编码问题。尝试在标头中将编码类型更改为 UTF-8。

于 2013-09-12T14:02:30.990 回答
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>";
}

老实说,我不确定为什么它现在有效!阅读有关处理文件上传的 PHP 文档。

为了解决这个问题,您不必费心替换字符,请尝试在发送它们时告诉浏览器您使用的是 UTF-8,正如@aaron 所建议的那样:

header('Content-Type: text/html; charset=utf-8');
于 2013-09-12T13:54:34.143 回答