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

被折叠的 条评论
为什么被折叠?



