Php在linux服务器上保存上传文件的编码错误

时间:2016-02-11 07:36:51

标签: php linux forms encoding upload

我有一个用于保存tmp文件的经典php脚本:

$uploads_dir = "scans";
var_dump( $_FILES );
foreach ($_FILES["pictures"]["error"] as $key => $error) {
    if ($error == UPLOAD_ERR_OK) {
        $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
        $name = $_FILES["pictures"]["name"][$key];

        rename($tmp_name, urldecode("/var/www/html/$uploads_dir/$name") );
    }
}
echo urldecode("/var/www/html/$uploads_dir/$name");

然而,'фавикон.png'文件被保存为'ѓавикон.png'。请帮我解释如何处理编码。

谢谢

编辑:

使用iconv功能。但是,由于一些奇怪的原因,它必须编码为Windows格式。

结果代码:

if ($error == UPLOAD_ERR_OK) {
    $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
    $name = $_FILES["pictures"]["name"][$key];
    $name =iconv('UTF-8','windows-1251',  $name);
    copy($tmp_name, "/var/www/html/$uploads_dir/$name");
}

3 个答案:

答案 0 :(得分:0)

您可能需要以下setlocale(LC_ALL, 'ru_RU.utf8')

答案 1 :(得分:0)

尝试将此行放在脚本的顶部:

header('Content-Type: text/html; charset=utf-8');

答案 2 :(得分:0)

您是否尝试使用utf8_decode:

utf8_decode($name);

我建议您更改文件名,有很好的理由这样做。查看此帖子了解详情:https://stackoverflow.com/a/17866898/1016425