PHP文件上传 - >替换特殊字符不起作用

时间:2013-09-12 13:41:10

标签: php file-upload preg-replace str-replace

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

我有一个带有上传表单的网络服务,两者都运行正常。我更喜欢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吗?我试了一下,但它也没用......

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

2 个答案:

答案 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。