Home >php教程 >php手册 >fckeditor 上传图片乱码的解决方法

fckeditor 上传图片乱码的解决方法

WBOY
WBOYOriginal
2016-06-13 09:55:351047browse

php教程中文乱码

中文名乱码是因为:
FCKeditor使用UTF-8编码,
自己机子比如是Windows系统
文件名使用的是GBK编码,
在上传中需要,改下编码,从UTF-8到GBK


==>第一个思路,转码思路,要修改两个文件,第一个文件:
.fckeditoreditorfilemanagerconnectorsphpcommands.php 文件

里面有一个 FileUpload 函数:

move_uploaded_file( $oFile['tmp_name'], $sFilePath ) ;
改为
move_uploaded_file( $oFile['tmp_name'], iconv("utf-8","gbk",$sFilePath) ) ;

----------

第二个文件:

.fckeditoreditorfilemanagerconnectorsphputil.php 文件

找到 ConvertToXmlAttribute 函数:

将:return ( utf8_encode( htmlspecialchars( $value ) ) ) ;

修改为:return iconv("GBK", "UTF-8", htmlspecialchars( $value ));

==>第二个思路,修改上传文件的名字:

需要修改如下:

在 .fckeditoreditorfilemanagerconnectorsphpcommands.php 文件中

找到 FileUpload 函数:将 $sFileName = $oFile['name'];

修改如下:

//--------------------------------------------------------------
   //修正上传文件中文乱码方法之二:(修改上传文件的名字)
   $sFileName = "sda.php";
   $sOriginalFileName = $sFileName;
   $sExtension = substr($sFileName, (strrpos($sFileName, '.') + 1));//找到扩展名
   $sExtension = strtolower($sExtension);
   $sFileName = date("YmdHis").rand(100, 200).".".$sExtension;
//--------------------------------------------------------------

个人认为第一种方法还是蛮好的!

 


java版

在使用FCKeditor2.4.3时若上传的图片或者flash的文件名为中文时,发现一下情况:
问题1:
当点击“插入/编辑图像”或者“插入/编辑Flash”按钮时,在弹出的对话框中选择上传按钮,如果上传的文件名为中文时会出现乱码。
解决办法:
  把SimpleUploaderServlet.java做如下修改:
  找到该程序中DiskFileUpload upload = new DiskFileUpload(),然后在该行下面添加
  upload.setHeaderEncoding("UTF-8")
问题2:
  当点击“插入/编辑图像”或者“插入/编辑Flash”按钮时,在弹出的对话框中使用浏览
服务器按钮上传中文文件时会出现乱码。
解决办法:
  和问题1的解决办法基本一样,只不过需要在ConnectorServlet.java中添加
upload.setHeaderEncoding("UTF-8")便可。
问题3:
  当点击“插入/编辑图像”或者“插入/编辑Flash”按钮时,在弹出的对话框中点击浏览
服务器按钮,会弹出“浏览服务器”页面,如果想在该页面中使用Create New Folder按钮
来创建一个中文目录时,会出现中文目录乱码。
解决办法:
  web容器的编码要与FCKeditor默认的编码UTF-8一致,如果使用的是Tomcat,需修改
tomcat服务器中conf目录下的server.xml。如下: 
 

              maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
              enableLookups教程="false" redirectPort="8443" acceptCount="100"
              connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="utf-8" />
                  enableLookups="false" redirectPort="8443" protocol="AJP/1.3" URIEncoding="utf-8"/>

其实就是在原来的基础上添加URIEncoding的属性值为utf-8。

在使用FCKeditor2.4.3时若上传的图片或者flash的文件名为中文时,发现一下情况:
问题1:
当点击“插入/编辑图像”或者“插入/编辑Flash”按钮时,在弹出的对话框中选择上传按钮,如果上传的文件名为中文时会出现乱码。
解决办法:
   找到FCKeditor.java解压包中的src目录下SimpleUploaderServlet.java做如下修改:
   找到该程序中DiskFileUpload upload = new DiskFileUpload(),然后在该行下面添加
upload.setHeaderEncoding("UTF-8"),重新编译成class文件并利用WinRAR把该class文件
添加到FCKeditor-2.3.jar中相应的位置,然后覆盖你的web项目中原来的jar包便可。
问题2:
   当点击“插入/编辑图像”或者“插入/编辑Flash”按钮时,在弹出的对话框中使用浏览
服务器按钮上传中文文件时会出现乱码。
解决办法:
   和问题1的解决办法基本一样,只不过需要在ConnectorServlet.java中添加
upload.setHeaderEncoding("UTF-8")便可。
问题3:
   当点击“插入/编辑图像”或者“插入/编辑Flash”按钮时,在弹出的对话框中点击浏览
服务器按钮,会弹出“浏览服务器”页面,如果想在该页面中使用Create New Folder按钮
来创建一个中文目录时,会出现中文目录乱码。
解决办法:
   web容器的编码要与FCKeditor默认的编码UTF-8一致,如果使用的是Tomcat,需修改
tomcat服务器中conf目录下的server.xml。如下:
  

               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="utf-8" />
                   enableLookups="false" redirectPort="8443" protocol="AJP/1.3" URIEncoding="utf-8"/>

其实就是在原来的基础上添加URIEncoding的属性值为utf-8。
 注:对于问题3,这种解决办法不可取,最好不要去修改服务器的编码,否则会影响到服务器上其它的工程。解决这个编码的问题可以修改源代码或者从新编写一个类来处理。通过观察打开的上传浏览对话框可以找对对应的htm页面和负责处理上传文件名称的com.fredck.FCKeditor.uploader. ConnectorServlet这个类,然后找到对应的参数,转换编码便可。如:String

newFolderStr=request.getParameter("NewFolderName");

newFolderStr=new String(newFolderStr.getBytes("iso8859-1"),"utf-8");
=================================================================================

fckeditor如果大家搞定啦1!那一定想到他是没有提供删除功能的!!
以下是一段js,放在调用feckeditor的jsp教程页面
function FCKeditor_OnComplete( editorInstance )
{
editorInstance.Events.AttachEvent( 'OnBlur', onEditorBlur );
}

function onEditorBlur(){
var imgs = FCKeditorAPI.GetInstance('EditorDefault').EditorDocument.body.all.tags("img");
for(var i=0; i alert(imgs[i].src);

//这里你可以用一个隐匿域来接收这些路径信息
}
}
把这些路径信息放置于数据库教程是的一个字段,删除文档时一起删除,就可以解决图片存留问题
========================================================================================
避免上下滚动条的出现:


在fckconfig.js中加入下列2句:

FCKConfig.Plugins.Add(   'autogrow '   )   ;
FCKConfig.AutoGrowMax   =   4000   ;   //这是允许自动增长的最大高度限制

同时请确认fckeditoreditorpluginsautogrow有这个目录存在,没有的话到官网下载最新版FCK。


另外注意FCKConfig.PluginsPath的路径你设置对了没有。
===========================================================================

FCKConfig.PluginsPath   =   FCKConfig.BasePath   +   'plugins/ '   ;

这个是对的,系统默认的路径,FCK使用也没问题

就是不能自动调整高度
=============================================================================

FCKConfig.PluginsPath   =   FCKConfig.BasePath   +   'plugins/ '   ;


这是js里的语句。BasePath不是在这设的,是在php里调用FCK时设置的。

========================================================================
不行的话是不是你曾经改过FCK的源码。
你重新下载文件,只改动这2行测试一下就知道了。别的什么都不用改就可以实现你所说的要求。

FCKConfig.Plugins.Add(   'autogrow '   )   ;
FCKConfig.AutoGrowMax   =   4000   ;

 

问题二

FCKeditor中文乱码问题

在FCKeditor的使用中,主要有在3个地方会出现中文乱码:

① 在“浏览服务器”页面中创建新目录时

问题:当点击“插入/编辑图象”或“插入/编辑Flash”时,会弹出“图象属性”或“Flash属性”对话框,然后单击其中的“浏览服务器”按钮时,会打开“浏览服务器”的页面,在这个页面中创建中文名目录时会出现乱码。

解决:修改Web容器的字符编码。因为FCKeditor的默认字符编码是UTF-8,所以将Web容器的字符编码也修改成UTF-8。如果Web容器用的是Tomcat,打开文件%CATALINA_HOME%/conf/server.xml,修改如下:

    port="8080"  
    redirectPort="8443"  
    minSpareThreads="25"  
    connectionTimeout="60000"  
    connectionLinger="-1"  
    serverSoTimeout="0"  
    maxSpareThreads="75"  
    maxThreads="150"  
    tcpNoDelay="true"  
    maxHttpHeaderSize="8192"  
IEncoding="UTF-8">  
  
    port="8009"  
    redirectPort="8443"  
    protocol="AJP/1.3"  
IEncoding="UTF-8">  
  
 

② 在“浏览服务器”页面中上传文件时

问题:在和①同样的方式打开的“浏览服务器”页面中上传中文名的文件时会出现乱码。

解决:打开项目WebRoot中的文件/editor/filemanager/browser/default/frmupload.html,在head中加一个meta:

  
③ 在“图象属性”或“Flash属性”对话框中上传文件时

问题:当点击“插入/编辑图象”或“插入/编辑Flash”时,会弹出“图象属性”或“Flash属性”对话框,点击其中的“上传”选项卡,点击“浏览...”按钮,选择一个中文名的文件,再点击“发送到服务器上”按钮,上传后的文件名是乱码。

解决:修改FCKeditor.Java源代码。通过Eclipse修改源码然后重新打包成jar文件比较方便。在Eclipse里新建Web工程FCKeditor-java-2.3,这里要注意,因为FCKeditor.Java的WebRoot目录名是web,所以建议新建工程时,WebRoot目录名也命名为web。把FCKeditor.Java里的相应目录复制到工程下。在src里找到ConnectorServlet.java和SimpleUploaderServlet.java两个文件,分别在两个文件中找到DiskFileUpload upload = new DiskFileUpload();,在其后加入upload.setHeaderEncoding("utf-8");。然后把Tomcat安装目录下/server/lib里的catalina-ant.jar复制到项目的/WEB-INF/lib下。打开build.xml,修改property name="catalina.home"成Tomcat的安装目录。修改taskdef name="deploy"、taskdef name="list"、taskdef name="reload"、taskdef name="undeploy"如下:

taskdef name="deploy"   classname="org.apache.catalina.ant.DeployTask">  
      
  
  
      
  
  
      
  
  
      
  

然后在Eclipse的Outline窗口中运行Ant的dist,就会生成的新的FCKeditor-2.3.jar。将使用了FCKeditor的项目中的FCKeditor-2.3.jar替换成这个新的。

上传失败问题

这里不考虑服务器方的原因。首先检查web.xml中SimpleUploader这个Servlet的配置里,是否把参数enabled设为了false。

另外,FCKeditor会自动创建web.xml中SimpleUploader的参数baseDir指定的目录。当通过“浏览服务器”页面上传文件时,如果baseDir下没有相应的Image或Flash目录,FCKeditor会自动创建Image或Flash目录;但是当通过“上传”选项卡中的“发送到服务器上”按钮上传文件时,如果baseDir下没有相应的Image或Flash目录,FCKeditor就会报错,这时需要你手动在baseDir下新建Image或Flash目


总结,不管是jsp,php,asp教程.net出问题我们都需要分析如下

是的,是中文编码问题,有两个办法可以解决
都需要改fck的相应文件源代码
1 把中文名的字符串转换编码

2 重命名文件名为英文加数字


那个文件名我现在没有看代码忘了,而且版本不同好像略有差别,你研究一下应该可以找出来的

Statement:
The content of this article is voluntarily contributed by netizens, and the copyright belongs to the original author. This site does not assume corresponding legal responsibility. If you find any content suspected of plagiarism or infringement, please contact admin@php.cn