`

ueditor上传图片中文文件名失败的解决办法

阅读更多

    ueditor是一个非常不错的在线html编辑器,作为百度的产品,在百度贴吧等应用中广泛应用,经受了时间和用户的考验,功能,性能和稳定性来说都是不错的。

    在试验的过程中,发现ueditor 默认使用时间戳加上6位随机数作为上传图片的名称,这样就导致一个问题,不管用户上传的是“简历.jpg”还是“myphotos.jpg”在服务器端都会变成类似 “1416821640984672.jpg”这样一串数字的文件名。对于日后文件的识别和管理非常不方便。在php版本的ueditor中,php文件夹中,可以通过config.json来更改这一设置。我将保存文件名更改成了 {time}_{filename} 这样,如果用户上传的文件是“我的照片.jpg”服务器端就会保存为类似 ”1416821640_我的照片.jpg“。

 

    在修改好这一配置后,开始上传了几个图片也都正常,但是在上传某些文件名带有中文的图片时,出现的上传错误,并且不能显示图片。查看html源代码,发现img src的路径是正确的,但是图片不能显示。

1.png

 

    到服务器上的上传文件夹去一看,文件是有了,但是文件名变成了乱码”1417049031_涓枃.jpg“,而不是期望的”1417049031_中文.jpg“,原因就是UTF版本的ueditor保存的中文文件名也是utf8的。解决方法很简单,找到其处理上传的核心文件,Upload.class.php,在第120行左右,将

 //移动文件

        if (!(move_uploaded_file($file["tmp_name"], $this->filePath) && file_exists($this->filePath))) { 

            $this->stateInfo = $this->getStateInfo("ERROR_FILE_MOVE");

        } else { 

            $this->stateInfo = $this->stateMap[0];

        }

 

//改为

 

      //移动文件

        $saveFilePath=iconv("UTF-8", "GBK//IGNORE",$this->filePath);//GBK//IGNORE可以替换为gb2312

        if (!(move_uploaded_file($file["tmp_name"], $saveFilePath) && file_exists($saveFilePath))) {

            $this->stateInfo = $this->getStateInfo("ERROR_FILE_MOVE");

        } else {

            $this->stateInfo = $this->stateMap[0];

        }

 

 

 

     

  • 大小: 45.4 KB
分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics