猿问

如何解决php中上传文件时中文文件名会乱码的问题?

我使用的是wamp,在实现文件上传功能时上传上去的文件名是中文话则会乱码,但数据库的信息是正确的,这该如何解决?
此外,在接受表单信息创建文件夹时,如果是中文,创建的文件夹名同样会乱码。

if($image_files = request()->file('image_uploads'))
        {
            foreach($image_files as $file){
                $info = $file->move(ROOT_PATH . 'public' . DS .'static' . '\\' . $title .'\\'. 'Picture' ,'');
                if($info){
                    $path_parts = pathinfo(ROOT_PATH . 'public' . DS . 'static' .'\\'. $info->getFilename());
                    //获取文件类型,名称及大小
                    $type=$path_parts['extension'];
                    $name=$path_parts['filename'];
                    $size=(filesize(ROOT_PATH . 'public' .DS. 'static' .'\\'.  $title .'\\'. 'Picture' . '\\' .$info->getFilename())>>10).'KB';
                    $data=['name'=>$name,'type'=>$type,'size'=>$size,'activity_id'=>$activityId];
                    Db::table('file')->insert($data);
                }else{
                    //上传失败获取错误信息
                    $this->error($file->getError());    
                }
                $upload_status = 1;
            }
ibeautiful
浏览 932回答 2
2回答

弑天下

保存文件时直接保存中文名的话,要注意 windows 的文件名是 gbk 编码的,而你使用的应该是utf8,需要转换一下。 不过,不推荐直接保存原文件名,推荐使用 文件名+时间戳,md5加密后的字符串,真实的文件名只保存在数据库。 因为如果有一天你要把程序放到 linux 中,文件名使用中文又会遇到问题。

慕村9548890

windows的文件名是gbk的
随时随地看视频慕课网APP
我要回答