在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); }