有一个客户原来用的是Linux系统的,没有出现这个问题。最近服务器到期了,转用Windows系统却出现这个问题了。经过整理得到以下总结:
问题:ECShop的编辑器上传图片的时候图片名称为中文时会出现乱码,同时获取服务器图片列表时所有中文名称的图片都无法获取。
原因:FCKeditor使用的编码与操作系统不一致
解决方法:
1、修改代码,通过转编码解决问题(推荐),此办法将近完美解决问题。
2、将上传的图片重领命(不推荐)此办法同样能够达到效果,但是会出现一种现象--之前上传的中文名称图片无法获取。
修改:
方法一:
修改“./includes/fckeditor/editor/filemanager/connectors/php/commands.php”里面的一个 FileUpload 函数(约220行):
move_uploaded_file( $oFile['tmp_name'], $sFilePath ) ;
改为
move_uploaded_file( $oFile['tmp_name'], iconv("utf-8","gbk",$sFilePath) ) ;
(注意:如果物理路径有包涵中文名称的,
要在210行修改 $sFilePath = $sServerDir . $sFileName ; 为 $sFilePath = iconv("gbk","utf-8",$sServerDir) . $sFileName ;
)
和“./includes/fckeditor/editor/filemanager/connectors/php/util.php”里面的一个 ConvertToXmlAttribute 函数(约73和77行):
return ( utf8_encode( htmlspecialchars( $value ) ) ) ;
改为
return htmlspecialchars( iconv("GBK", "UTF-8", $value ));
方法二:
修改“./includes/fckeditor/editor/filemanager/connectors/php/commands.php”里面的一个 FileUpload 函数(约177行):
$sFileName = $oFile['name'] ;
改为
$string = 'abcdefghijklmnopqrstuvwxyz0123456789'; $rand = ''; for ($x=0;$x<6;$x++){ mt_srand(); $rand.= substr($string,mt_rand(0,strlen($string)-1),1); } $sFileName = date('YmdHis').$rand.".".strtolower(array_pop(explode(".",$oFile['name'])));
总结:从上面来看个人还是推荐方法一,此方法能够完美处理。虽说中文名称始终不太好,但是也方便管理。如果你的网站是刚开始搭建的话用那种方法都无所谓,如果是已经用一段时间的只能用第一种了,否则之前上传的中文图片就在编辑器中不能被获取。
本文为dsg112社区原创文章,转载无需和我联系,但请注明来自dsg112社区. www.dsg112.com