找回密码
 立即注册
搜索
查看: 406|回复: 0

[thinkphp] 彻底解决ThinkPHP5底层不支持上传保存中文文件名的问题

  [复制链接]
发表于 2023-2-22 22:14 | 显示全部楼层 |阅读模式

要想保存为中文文件名,首先,我们要了解一下操作系统的编码:当前我们用的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');//将上传的中文文件名保存规则和不使用中文文件名保存规则一致
        }
 

修改完以上两个文件,相信你已经能够看到中文文件可以正常上传且保存为中文文件了。效果:

 

 

其实是移植了这个编辑器的部分功能而已:呵呵,这个编辑器太古老了。

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有账号?立即注册

×
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

Archiver|手机版|小黑屋|学习笔记

GMT+8, 2024-12-22 09:13 , Processed in 0.024220 second(s), 15 queries , APCu On.

Powered by Discuz! X3.5

© 2001-2024 Discuz! Team.

快速回复 返回顶部 返回列表