当前位置:论坛首页 > 新功能建议 > Linux面板

【已完成】宝塔上传解压中文乱码问题

发表在 新功能建议2022-3-7 17:44 [复制链接] 1 2453

大部分在线上传解压可能中文文件名乱码
以下可能是解决关键

默认识别的编码比如EUC-CN 实际是gb2312 CP936实际是gbk。
  1. <?php
  2. header('Content-type:text/html;charset=utf-8');
  3. if(!function_exists('mb_detect_encoding')) exit("No mb_detect_encoding()");

  4. $arr=array('EUC-CN' => 'GB2312','CP936' => 'GBK','SJIS-mac'=>'MacJapanese','SJIS-Mobile#DOCOMO'=>'SJIS-DOCOMO','SJIS-Mobile#KDDI'=>'SJIS-KDDI','SJIS-Mobile#SOFTBANK'=>'SJIS-SOFTBANK','UTF-8-Mobile#DOCOMO'=>'UTF-8-DOCOMO','UTF-8-Mobile#KDDI-B'=>'UTF-8-KDDI','UTF-8-Mobile#SOFTBANK'=>'UTF-8-SOFTBANK','ISO-2022-JP-MOBILE#KDDI'=>'ISO-2022-JP-KDDI');

  5. $zipfile = 'LW1X_V210814_080158.zip';
  6. $zipDir = "./";
  7. $zip = new ZipArchive();
  8. if ($zip->open($zipfile) == true) {
  9. $rf = zip_open($zipfile); $i = 0;
  10. while ($fr = zip_read($rf)) {
  11. $fileInfo = $zip->statIndex($i);
  12. $fileName=$fileInfo['name'];
  13. if($fileName!="null" && !stristr("--/-\-","-{$fileName}-")){ //无效文件过滤
  14. $encode = mb_detect_encoding($fileName, ['ASCII', 'UTF-8', 'GB2312', 'GBK', 'BIG5']);
  15. if(array_key_exists($encode, $arr)) $encode = $arr[$encode]; //特殊编码处理
  16. $fileName = mb_convert_encoding($fileName, 'UTF-8', $encode);
  17. echo "<p>$i \t ".$fileName."</p>";
  18. $toDir = $zipDir . $fileName; $teDir = dirname($toDir);
  19. $content = zip_entry_read($fr, zip_entry_filesize($fr));
  20. if (!is_dir($teDir)) { mkdir($teDir, 755, true);}
  21. file_put_contents($toDir, $content);
  22. }
  23. $i++;
  24. }
  25. }
  26. $zip->close();
复制代码




使用道具 举报 只看该作者 回复
发表于 2022-3-7 20:09:34 | 显示全部楼层
您好,使用php进行文件打包的我们没有做过测试,我们面板上打包的使用的是系统的zip、tar进行打包的
使用道具 举报 回复 支持 1 反对 0
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

企业版年付运维跟进群

普通问题处理

论坛响应时间:72小时

问题处理方式:排队(仅解答)

工作时间:白班:9:00 - 18:00

紧急问题处理

论坛响应时间:10分钟

问题处理方式:1对1处理(优先)

工作时间:白班:9:00 - 18:00

工作时间:晚班:18:00 - 24:00

立即付费处理
快速回复 返回顶部 返回列表