yii CUploadedFile 上传 中文乱码

本文详细介绍了在使用YII框架进行文件上传时遇到中文文件名乱码的问题,并提供了解决方案。通过使用iconv函数转换文件名编码,确保了中文文件名在保存时不会出现乱码。此解决方案适用于需要处理中文文件名的YII框架项目。

在yii框架中,有一个上传类。
CUploadedFile
在上传英文名称的文件时,没什么问题出现。
如果换是文件名包含有中文时,就会出现乱码。主要是因为saveAs时,中文编码不是GBK或者GB2312
所以在保存时,把文件名转下编码
如:
iconv('utf-8','gb2312',$filename)

帖出的我上传代码,把文件名,按time()来作文件名。

1,controller里的Action代码 如下
   

public function actionEditProjectCategory(){//编辑项目分类
        $app = Yii::app();
        $projectcategory=new ProjectCategory();
        
        if($app->request->isPostRequest){
            
            $postarray['category_name']=trim($_POST["category_name"]);
            $postarray['is_show']=$_POST["is_show"];
            $postarray['category_order']=intval(trim($_POST["category_order"]));
            $postarray['category_comment']=trim($_POST["category_comment"]);

            $a=CUploadedFile::getInstance($projectcategory,'category_img');//上传文件
            if (!empty($a)){
            $b=$a->extensionName;
            $c=time();
            $postarray['category_img']="/assets/upload/".$c.".".$b;
            $a->saveAs($_SERVER['DOCUMENT_ROOT']."/assets/upload/".iconv('utf-8','gb2312',$a->name));
                if(file_exists($_SERVER['DOCUMENT_ROOT']."/assets/upload/".iconv('utf-8','gb2312',$a->name))){
                    
                $category_info=ProjectCategory::model()->findByPk(intval($_POST['category_id']));
            if (!empty($category_info->category_img)){//判断项目分类是否存在图片,如有,删除
                unlink($_SERVER['DOCUMENT_ROOT'].$category_info->category_img);
            }
                rename($_SERVER['DOCUMENT_ROOT']."/assets/upload/".iconv('utf-8','gb2312',$a->name),$_SERVER['DOCUMENT_ROOT'].$postarray['category_img']);                //重新换文件名称
            }}
            $cid=intval($_POST['category_id']);
            $projectcategory->updateByPk($cid,$postarray);
            Share::msgBox('更新成功。',"project_category" . Yii::app()->urlManager->urlSuffix);
        
        }
        //$data['categorylist']=$projectcategory->findall();
        $cid=intval($_GET['cid']);
        $data['category']=$projectcategory->findByPk($cid);
        $data['model']=$projectcategory;
        $this->render('admin/project_edit_category',$data);
    }
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值