要想保存为中文文件名,首先,我们要了解一下操作系统的编码:当前我们用的windows系统简体中文版,编码为gb2312;而linux系统用的编码为utf-8。回显给浏览器时要统一用utf-8编码,就这么简单。
注明:以下代码在dolphin框架上测试通过。其实原理都一样的,我在wordpress上也用hackdownload-manager上也测试通过。
具体步骤:
1、修改文件:application/admin/controller/Attachment.php第256行为:
$info = $file->move(config('upload_path') . DS . $dir, false);//红色为添加的
2、修改文件:thinkphp/library/think/File.php。请添加以下红色文字。
找到setSaveName方法:将中文文件名转为utf-8输出给浏览器,
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
$saveName = iconv('gb2312', 'utf-8',$saveName);
}
$this->saveName = $saveName;
约366行:
$saveName = $this->buildSaveName($savename);
if (strtoupper(substr(PHP_OS, 0, 3)) === 'WIN') {
$saveName = iconv('utf-8','gb2312//IGNORE', $saveName);
}
约442行:
} elseif ('' === $savename || false === $savename) {
$savename = date('Ymd') . DS . $this->getInfo('name');//将上传的中文文件名保存规则和不使用中文文件名保存规则一致
}
修改完以上两个文件,相信你已经能够看到中文文件可以正常上传且保存为中文文件了。效果:
其实是移植了这个编辑器的部分功能而已:呵呵,这个编辑器太古老了。
|