java ckfinder中文_CKfinder中文乱码的解决.
最近在寫(xiě)一個(gè)類似博客的系統(tǒng),使用了ckeditor和ckfinder,但是發(fā)現(xiàn)ckfinder在上傳中文文件名的文件過(guò)程中會(huì)出現(xiàn)中文亂碼的情況.
于是百度google乎,發(fā)現(xiàn)大多數(shù)的解決辦法都是將文件名稱命名成時(shí)間.但可是可但是,我是一名地道的中國(guó)人啊,為啥不行讓我使用中文的文件名.
研究下ckfinder.
在core/connector/php/php5/CommandHandler/FileUpload.php內(nèi)發(fā)現(xiàn)..大概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']));
//這行是調(diào)用了CKFinder_Connector_Utils_FileSystem::convertToFilesystemEncoding方法,轉(zhuǎn)換了
//名稱,網(wǎng)上多數(shù)的方法是將這個(gè)名字變成日期命名.
$sFileName = CKFinder_Connector_Utils_FileSystem::secureFileName($sUnsafeFileName);
然后我試圖改變這里的文件編碼.
增加了$uploadedFile['name'] = iconv(“utf-8″,”gbk”, $uploadedFile['name']);
但是發(fā)現(xiàn)這樣會(huì)導(dǎo)致上傳的文件名稱是正確的,但是在ckfinder里面顯示的文件名稱是錯(cuò)誤的.
于是乎去看這個(gè)convertToFilesystemEncoding方法,這個(gè)方法在,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;
}
函數(shù)大概的意思是 ? 首先拿到配置文件里面配置的當(dāng)前系統(tǒng)編碼.
如果設(shè)置的為utf8 那么直接輸出,如果設(shè)置的是ISO-8859-1,編碼后輸出,如果設(shè)置的是其他的編碼,那么通過(guò)iconv函數(shù)轉(zhuǎn)換后輸出.
打開(kāi)配置文件,根目錄下的config.php.找到這個(gè)配置選項(xiàng).大概在258行.將原始的utf-8改成gbk(簡(jiǎn)體中文window7系統(tǒng).),中文亂碼問(wèn)題順利解決.
這個(gè)配置到底應(yīng)該怎么配置.取決于你當(dāng)前系統(tǒng)對(duì)中文文件名稱的編碼.默認(rèn)的windows系統(tǒng)應(yīng)該是gbk,如果是linux系統(tǒng).在沒(méi)設(shè)置的情況下是utf8 ?也有可能設(shè)置成了gbk.簡(jiǎn)單修改配置文件,
問(wèn)題就能夠得到解決.
總結(jié)
以上是生活随笔為你收集整理的java ckfinder中文_CKfinder中文乱码的解决.的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 机场调度算法
- 下一篇: Android(安卓)简单拨号器案例