您的位置:365bet体育备用网址器 > 应用 > 上传粤语名文件乱码难题,能够得逞上传文件

上传粤语名文件乱码难题,能够得逞上传文件

2019-10-03 17:26

上传中文名文件乱码问题

新版本的CKEditor只提供了基本的文本编辑功能,上传模块由另一个组件CKFinder。这里主要记录CKFinder上传的一些参数配置,能够成功上传文件,自定义上传文件目录,按日期 随机字符重命名文件。

在ckfinder/config.php中找到如下一段配置代码:

1、下载CKFinder。
下载CKFinder,解压跟CKEditor放同一目录,下载地址:

 

2、开启上传功能。
打开ckfinder\config.php文件,找到函数CheckAuthentication(),大约在21行,将最后一行return false;改为return true;

 代码如下

3、自定义上传文件目录。
打开ckfinder\config.php文件,设置变量$baseUrl = '/upload/';,大约在63行。

/*
If you have iconv enabled (visit for more information),
you can use this directive to specify the encoding of file names in your
system. Acceptable values can be found at:

4、设置按日期生成上传子目录。
如果您的网站上传文件比较多,文件都在一个目录下的话,对文件性能可能不是很思想,这时我们按/upload/yyyy/mm/格式生成目录。打开 ckfinder\config.php文件,找到$config['ResourceType'][],大约在189行,在 'url' => $baseUrl . 'files' 和 'directory' => $baseDir . 'files' 都加上  . '/' . date("Y") . '/' . date("m"),其它 Images,Flash项也是如此。这里的 url 表示上传后返回到输入框的地址,directory表示上传文件的目录。

Examples:
$config['FilesystemEncoding'] = 'CP1250';
$config['FilesystemEncoding'] = 'ISO-8859-2';
*/
$config['FilesystemEncoding'] = 'UTF-8';

365bet在线官网,5、按日期 随机字符重命名上传文件。
这样可以支持中文名字的文件上传。打开ckfinder\core\connector\php\php5\CommandHandler\FileUpload.php文件,在文件最后加个生成文件名函数

将UTF-8修改为GB2312,上传后文件名正确了,但在CKEditor中显示的链接出现乱码,因为CKEditor所在页面使用的字符集是UTF-8,未去细究如何解决这个问题,采用了文件重命名的方案去替代解决。

 代码如下

上传文件重命名

function mySetFileName() {
    $gettime = explode(' ', microtime());
    $string = 'abcdefghijklmnopgrstuvwxyz0123456789';
    $rand = '';

修改ckfindercoreconnectorphpphp5CommandHandlerFileUpload.php

    for ($x = 0; $x < 5; $x ) {
        $rand .= substr($string, mt_rand(0, strlen($string) - 1), 1);
    }

找到以下代码

    return date("ymdHis") . substr($gettime[0], 2, 6) . $rand;
}

 代码如下

查找下面代码,大约在63行,

if ($sFileName != $sUnsafeFileName) {
  $iErrorNumber = CKFINDER_CONNECTOR_ERROR_UPLOADED_INVALID_NAME_RENAMED;
}

 代码如下

在这段代码之后添加

if ($sFileName != $sUnsafeFileName) {
    $iErrorNumber = CKFINDER_CONNECTOR_ERROR_UPLOADED_INVALID_NAME_RENAMED;
}

 代码如下

在下方添加下面代码,

$sExtension=CKFinder_Connector_Utils_FileSystem::getExtension($sFileName);
$sFileName=date('YmdHis').'.'.$sExtension;

 代码如下

$sExtension = CKFinder_Connector_Utils_FileSystem::getExtension($sFileName);
$sFileName = mySetFileName() . '.' . $sExtension;

本文由365bet体育备用网址器发布于应用,转载请注明出处:上传粤语名文件乱码难题,能够得逞上传文件

关键词: