FCKeditor 內部使用 UTF-8 編碼,但 Windows 伺服器檔案系統預設為 GBK/Big5,導致中文檔名在上傳、瀏覽、建立資料夾時出現亂碼。
修改兩個檔案:
editor/filemanager/connectors/php/commands.php)FileUpload 函數中的 move_uploaded_file():// 原始
move_uploaded_file($oFile['tmp_name'], $sFilePath);
// 修改為
move_uploaded_file($oFile['tmp_name'], iconv("UTF-8", "GBK", $sFilePath));
editor/filemanager/connectors/php/util.php)ConvertToXmlAttribute 函數:// 原始
return utf8_encode(htmlspecialchars($value));
// 修改為
return iconv("GBK", "UTF-8", htmlspecialchars($value));
於 commands.php 的 FileUpload 函數中:
// 取得副檔名
$sExtension = strtolower(substr($sFileName, strrpos($sFileName, '.') + 1));
// 產生新檔名:時間戳 + 隨機數 + 副檔名
$sFileName = date("YmdHis") . rand(100, 999) . "." . $sExtension;
修改 SimpleUploaderServlet.java 與 ConnectorServlet.java:
DiskFileUpload upload = new DiskFileUpload();
upload.setHeaderEncoding("UTF-8"); // 加在這行後
重新編譯並更新 FCKeditor-2.x.jar。
修改 server.xml 的 Connector:
<Connector port="8080" ... URIEncoding="UTF-8" />
<Connector port="8009" ... URIEncoding="UTF-8" />
注意:此設定影響全站,可能干擾其他專案,建議優先用程式碼層面解決。
於 ConnectorServlet 參數取得處轉碼:
String newFolderStr = request.getParameter("NewFolderName");
newFolderStr = new String(newFolderStr.getBytes("ISO-8859-1"), "UTF-8");
Content-Disposition 還原。original_name、saved_name、file_path、mime_type、file_sizeheader("Content-Type: $mime_type");
header("Content-Disposition: attachment; filename=\"$original_name\"");
readfile($file_path);
frmupload.html 加入:<meta http-equiv="Content-Type" content="text/html; charset=utf-8">於 fckconfig.js 加入:
FCKConfig.Plugins.Add('autogrow');
FCKConfig.AutoGrowMax = 4000;
確認 editor/plugins/autogrow/ 目錄存在。
FCKeditor 無內建刪除功能,建議:
OnBlur 事件收集所有圖片路徑存隱藏欄位