使用 FCKeditor 或 CKEditor 上傳中文文件名出現亂碼?核心原因是編輯器採用 UTF-8 編碼,而服務器文件系統可能使用 GBK/GB2312。本文提供三種解決方案,含保留中文文件名與時間戳重命名兩種策略。
修改 fckeditor/editor/filemanager/connectors/php/commands.php:
// 找到獲取擴展名代碼後添加
$sExtension = substr($sFileName, (strrpos($sFileName, '.') + 1));
$sExtension = strtolower($sExtension);
// 新增:使用時間戳作為文件名
$sFileName = strtotime('now') . '.' . $sExtension;
優點:徹底解決亂碼、防止文件重名、無需處理編碼轉換。
同文件 commands.php 中 FileUpload 函數:
// 原代碼
move_uploaded_file($oFile['tmp_name'], $sFilePath);
// 修改為:將路徑從 UTF-8 轉 GBK
move_uploaded_file($oFile['tmp_name'], iconv('utf-8', 'gbk', $sFilePath));
修改 fckeditor/editor/filemanager/connectors/php/util.php:
function ConvertToXmlAttribute($value) {
// 原代碼
// return utf8_encode(htmlspecialchars($value));
// 修改為:GBK 轉 UTF-8
return iconv('GBK', 'UTF-8', htmlspecialchars($value));
}
Linux 服務器建議直接設置文件系統為 UTF-8,無需轉碼:
SET NAMES utf8mb4charset utf-8上傳測試文件:測試文件_2024.pdf,檢查服務器實際文件名與編輯器顯示是否一致。