ECShop上传中文名称图片乱码

有一个客户原来用的是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'])));


总结:从上面来看个人还是推荐方法一,此方法能够完美处理。虽说中文名称始终不太好,但是也方便管理。如果你的网站是刚开始搭建的话用那种方法都无所谓,如果是已经用一段时间的只能用第一种了,否则之前上传的中文图片就在编辑器中不能被获取。


白俊遥博客
请先登录后发表评论
  • 最新评论
  • 总共0条评论