首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
您现在的位置: 程式碼之家 >> 編程語言 >  >> 網頁程式設計 >> PHP 程式設計 >> PHP 相關知識

FCKeditor/CKEditor 中文文件名上傳亂碼完美解決方案

     編輯:PHP 相關知識

使用 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;

優點:徹底解決亂碼、防止文件重名、無需處理編碼轉換。

方案二:保留中文文件名(編碼轉換)

步驟 1:修改文件上傳路徑編碼

同文件 commands.php 中 FileUpload 函數:

// 原代碼
move_uploaded_file($oFile['tmp_name'], $sFilePath);

// 修改為:將路徑從 UTF-8 轉 GBK
move_uploaded_file($oFile['tmp_name'], iconv('utf-8', 'gbk', $sFilePath));

步驟 2:修改 XML 輸出編碼

修改 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));
}

方案三:統一使用 UTF-8 文件系統(現代服務器推薦)

Linux 服務器建議直接設置文件系統為 UTF-8,無需轉碼:

  • 確保 PHP 文件保存為 UTF-8 無 BOM
  • 數據庫連接設置 SET NAMES utf8mb4
  • Apache/Nginx 添加 charset utf-8

驗證測試

上傳測試文件:測試文件_2024.pdf,檢查服務器實際文件名與編輯器顯示是否一致。

  1. 上一篇文章:
  2. 下一篇文章:
Copyright © 程式碼之家 All Rights Reserved