鍍金池/ 問(wèn)答/PHP  Linux  HTML/ 如何解決php中上傳文件時(shí)中文文件名會(huì)亂碼的問(wèn)題?

如何解決php中上傳文件時(shí)中文文件名會(huì)亂碼的問(wèn)題?

我使用的是wamp,在實(shí)現(xiàn)文件上傳功能時(shí)上傳上去的文件名是中文話則會(huì)亂碼,但數(shù)據(jù)庫(kù)的信息是正確的,這該如何解決?
此外,在接受表單信息創(chuàng)建文件夾時(shí),如果是中文,創(chuàng)建的文件夾名同樣會(huì)亂碼。

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{
                    //上傳失敗獲取錯(cuò)誤信息
                    $this->error($file->getError());    
                }
                $upload_status = 1;
            }
回答
編輯回答
兮顏

windows的文件名是gbk的

2017年3月10日 22:53
編輯回答
尛憇藌

保存文件時(shí)直接保存中文名的話,要注意 windows 的文件名是 gbk 編碼的,而你使用的應(yīng)該是utf8,需要轉(zhuǎn)換一下。

不過(guò),不推薦直接保存原文件名,推薦使用 文件名+時(shí)間戳,md5加密后的字符串,真實(shí)的文件名只保存在數(shù)據(jù)庫(kù)。

因?yàn)槿绻幸惶炷阋殉绦蚍诺?linux 中,文件名使用中文又會(huì)遇到問(wèn)題。

2017年5月18日 06:44