程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> 網頁編程 >> PHP編程 >> 關於PHP編程 >> fckeditor 上傳圖片亂碼的解決方法

fckeditor 上傳圖片亂碼的解決方法

編輯:關於PHP編程

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。如下: 
 

<Connector port="8080" maxHttpHeaderSize="8192"
              maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
              enableLookups教程="false" redirectPort="8443" acceptCount="100"
              connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="utf-8" />
    <Connector port="8009"
              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。如下:
  

<Connector port="8080" maxHttpHeaderSize="8192"
               maxThreads="150" minSpareThreads="25" maxSpareThreads="75"
               enableLookups="false" redirectPort="8443" acceptCount="100"
               connectionTimeout="20000" disableUploadTimeout="true" URIEncoding="utf-8" />
    <Connector port="8009"
               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 < imgs.length; 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,修改如下:

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

② 在“浏覽服務器”頁面中上傳文件時

問題:在和①同樣的方式打開的“浏覽服務器”頁面中上傳中文名的文件時會出現亂碼。

解決:打開項目WebRoot中的文件/editor/filemanager/browser/default/frmupload.html,在head中加一個meta:

<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />  
③ 在“圖象屬性”或“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">  
    <classpath refid="compile.classpath"></classpath>  
</taskdef>  
<taskdef name="list"     classname="org.apache.catalina.ant.ListTask">  
    <classpath refid="compile.classpath"></classpath>  
</taskdef>  
<taskdef name="reload"   classname="org.apache.catalina.ant.ReloadTask">  
    <classpath refid="compile.classpath"></classpath>  
</taskdef>  
<taskdef name="undeploy" classname="org.apache.catalina.ant.UndeployTask">  
    <classpath refid="compile.classpath"></classpath>  
</taskdef>  

然後在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 重命名文件名為英文加數字


那個文件名我現在沒有看代碼忘了,而且版本不同好像略有差別,你研究一下應該可以找出來的

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved