鍍金池/ 問答/PHP  Linux  HTML/ 如何解決php中上傳文件時中文文件名會亂碼的問題?

如何解決php中上傳文件時中文文件名會亂碼的問題?

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

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;
            }
回答
編輯回答
兮顏

windows的文件名是gbk的

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

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

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

因為如果有一天你要把程序放到 linux 中,文件名使用中文又會遇到問題。

2017年5月18日 06:44