java ckfinder中文_CKfinder中文乱码的解决.
最近在寫一個類似博客的系統,使用了ckeditor和ckfinder,但是發現ckfinder在上傳中文文件名的文件過程中會出現中文亂碼的情況.
于是百度google乎,發現大多數的解決辦法都是將文件名稱命名成時間.但可是可但是,我是一名地道的中國人啊,為啥不行讓我使用中文的文件名.
研究下ckfinder.
在core/connector/php/php5/CommandHandler/FileUpload.php內發現..大概53行左右.
if (!isset($uploadedFile['name'])) {
$this->_errorHandler->throwError(CKFINDER_CONNECTOR_ERROR_UPLOADED_INVALID);
}
$sUnsafeFileName = CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding(CKFinder_Connector_Utils_Misc::mbBasename($uploadedFile['name']));
//這行是調用了CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding方法,轉換了
//名稱,網上多數的方法是將這個名字變成日期命名.
$sFileName = CKFinder_Connector_Utils_FileSystem::secureFileName($sUnsafeFileName);
然后我試圖改變這里的文件編碼.
增加了$uploadedFile['name'] = iconv(“utf-8″,”gbk”, $uploadedFile['name']);
但是發現這樣會導致上傳的文件名稱是正確的,但是在ckfinder里面顯示的文件名稱是錯誤的.
于是乎去看這個convertToFilesystemEncoding方法,這個方法在,core\connector\php\php5\Utils\FileSystem.php中
404-427行,
public static function convertToConnectorEncoding($fileName)
{
$_config =& CKFinder_Connector_Core_Factory::getInstance("Core_Config");
$encoding = $_config->getFilesystemEncoding();
if (is_null($encoding) || strcasecmp($encoding, "UTF-8") == 0 || strcasecmp($encoding, "UTF8") == 0) {
return $fileName;
}
if (!function_exists("iconv")) {
if (strcasecmp($encoding, "ISO-8859-1") == 0 || strcasecmp($encoding, "ISO8859-1") == 0 || strcasecmp($encoding, "Latin1") == 0) {
return utf8_encode($fileName);
} else {
return $fileName;
}
}
$converted = @iconv($encoding, "UTF-8", $fileName);
if ($converted === false) {
return $fileName;
}
return $converted;
}
函數大概的意思是 ? 首先拿到配置文件里面配置的當前系統編碼.
如果設置的為utf8 那么直接輸出,如果設置的是ISO-8859-1,編碼后輸出,如果設置的是其他的編碼,那么通過iconv函數轉換后輸出.
打開配置文件,根目錄下的config.php.找到這個配置選項.大概在258行.將原始的utf-8改成gbk(簡體中文window7系統.),中文亂碼問題順利解決.
這個配置到底應該怎么配置.取決于你當前系統對中文文件名稱的編碼.默認的windows系統應該是gbk,如果是linux系統.在沒設置的情況下是utf8 ?也有可能設置成了gbk.簡單修改配置文件,
問題就能夠得到解決.
總結
以上是生活随笔為你收集整理的java ckfinder中文_CKfinder中文乱码的解决.的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: 机场调度算法
- 下一篇: 在…视域下是什么意思_视阈是什么意思论文