ueditor是一个非常不错的在线html编辑器,作为百度的产品,在百度贴吧等应用中广泛应用,经受了时间和用户的考验,功能,性能和稳定性来说都是不错的。太仓人才网目前正在测试将原有的html编辑器替换成ueditor。
在试验的过程中,发现ueditor 默认使用时间戳加上6位随机数作为上传图片的名称,这样就导致一个问题,不管用户上传的是“简历.jpg”还是“myphotos.jpg”在服务器端都会变成类似 “1416821640984672.jpg”这样一串数字的文件名。对于日后文件的识别和管理非常不方便。在php版本的ueditor中,php文件夹中,可以通过config.json来更改这一设置。我将保存文件名更改成了 {time}_{filename} 这样,如果用户上传的文件是“我的照片.jpg”服务器端就会保存为类似 ”1416821640_我的照片.jpg“。这一设计也和之前太仓人才网的html编辑器一致。
在修改好这一配置后,开始上传了几个图片也都正常,但是在上传某些文件名带有中文的图片时,出现的上传错误,并且不能显示图片。查看html源代码,发现img src的路径是正确的,但是图片不能显示。
到服务器上的上传文件夹去一看,文件是有了,但是文件名变成了乱码”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);
if (!(move_uploaded_file($file["tmp_name"], $saveFilePath) && file_exists($saveFilePath))) {
$this->stateInfo = $this->getStateInfo("ERROR_FILE_MOVE");
} else {
$this->stateInfo = $this->stateMap[0];
}