返回顶部
首页 > 资讯 > 后端开发 > PHP编程 >怎么解决php压缩中文乱码问题
  • 591
分享到

怎么解决php压缩中文乱码问题

2024-04-02 19:04:59 591人浏览 安东尼
摘要

本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。怎么解决php压缩中文乱码问题?解决php使用ZipArcHive解压时中文乱码问题(纯php,绕开ZipArchive)解决php使用ZipArchive解压时中文

教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。

怎么解决php压缩中文乱码问题?

解决php使用ZipArcHive解压时中文乱码问题(纯php,绕开ZipArchive)

解决php使用ZipArchive解压时中文乱码问题

使用php自带的ZipArchive来解压带中文文件名压缩包时会造成乱码,现象如下:

c7da6d0a51a74ec066b365480eb745c.jpg

网上查阅基本上给出的答案大同小异,自己照着同样的方法试了都不能解决,下图是网上给出的方案:

d2846efa0535a792755341dcc94ea3f.jpg

经过摸索终于找到了解决方案,那就是弃用ZipArchive,选择其他的途径,经过比较我选择了“PhpZip”,优点是:纯php(不需要扩展和类),下面介绍安装方法:

composer安装:

composer require nelexa/zip

如果选择版本的话:composer require nelexa/zip:^3.0 (3.0版本号)

使用方法:

//解压文件
$fileAddess = "压缩包地址";
$toDir = "解压目录";
$zipFile = new \PhpZip\ZipFile();
$zipFile->openFile($fileAddess) // open archive from file
->extractTo($toDir); // extract files to the specified directory
$zipFile->close();

注释:(**如果安装好使用正常请忽略下面的注释内容**)

1.我的压缩包放在共享盘里面连接的是smb地址,可能会出现报错:"Destination is not writable directory",这个坑已经踩过:打开ZipFile.php这个文件,找到“extractTo”方法,将“is_writable”函数改掉,或者去掉,然后再转换一下编码格式!,下面有注释的是我修改的内容!


    public function extractTo($destination, $entries = null)
    {
        if (!file_exists($destination)) {
            throw new ZipException("Destination " . $destination . " not found");
        }
        if (!is_dir($destination)) {
            throw new ZipException("Destination is not directory");
        }
        $is_really_writable = $this->is_really_writable($destination);
        if (!$is_really_writable) {
            throw new ZipException("Destination is not writable directory");
        }
        
        if (!empty($entries)) {
            if (is_string($entries)) {
                $entries = (array)$entries;
            }
            if (is_array($entries)) {
                $entries = array_unique($entries);
                $flipEntries = array_flip($entries);
                $zipEntries = array_filter(
                    $this->centralDirectory->getEntries(),
                    function ($zipEntry) use ($flipEntries) {
                        
                        return isset($flipEntries[$zipEntry->getName()]);
                    }
                );
            }
        } else {
            $zipEntries = $this->centralDirectory->getEntries();
        }
        foreach ($zipEntries as $entry) {
            
            header("Content-type:text/html;charset=bgk");
            $entry_getName = iconv('GB2312', 'UTF-8//ignore',$entry->getName());
            //header("Content-type:text/html;charset=utf-8");
            
            $file = $destination . DIRECTORY_SEPARATOR . $entry_getName;
            if ($entry->isDirectory()) {
                if (!is_dir($file)) {
                    if (!mkdir($file, 0755, true)) {
                        throw new ZipException("Can not create dir " . $file);
                    }
                    chmod($file, 0755);
                    touch($file, $entry->getTime());
                }
                continue;
            }
            $dir = dirname($file);
            if (!is_dir($dir)) {
                if (!mkdir($dir, 0755, true)) {
                    throw new ZipException("Can not create dir " . $dir);
                }
                chmod($dir, 0755);
                touch($dir, $entry->getTime());
            }
            if (file_put_contents($file, $entry->getEntryContent()) === false) {
                throw new ZipException('Can not extract file ' . $entry_getName);
            }
            touch($file, $entry->getTime());
        }
        return $this;
    }
    //王天佑加的新逻辑,判断目录是否可写
    public function is_really_writable($file){
        if (DIRECTORY_SEPARATOR == '/' AND @ini_get("safe_mode") == FALSE) {
            return is_writable($file);
        }
        if (is_dir($file)) {
            $file = rtrim($file, '/') . '/' . md5(mt_rand(1,100) . mt_rand(1,100));
            if (($fp = @fopen($file, "w+")) === FALSE) {
                return FALSE;
            }
            fclose($fp);
            @chmod($file, 0777);
            @unlink($file);
        } elseif (!is_file($file) OR ($fp = @fopen($file, "r+")) === FALSE) {
            fclose($fp);
            return FALSE;
        }
        return TRUE;
    }

以上就是怎么解决php压缩中文乱码问题的详细内容,更多请关注编程网其它相关文章!

--结束END--

本文标题: 怎么解决php压缩中文乱码问题

本文链接: https://lsjlt.com/news/155105.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

猜你喜欢
  • 怎么解决php压缩中文乱码问题
    本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。怎么解决php压缩中文乱码问题?解决php使用ZipArchive解压时中文乱码问题(纯php,绕开ZipArchive)解决php使用ZipArchive解压时中文...
    99+
    2024-04-02
  • php压缩中文乱码问题如何解决
    这篇“php压缩中文乱码问题如何解决”文章的知识点大部分人都不太理解,所以小编给大家总结了以下内容,内容详细,步骤清晰,具有一定的借鉴价值,希望大家阅读完这篇文章能有所收获,下面我们一起来看看这篇“php压缩中文乱码问题如何解决”文章吧。p...
    99+
    2023-07-04
  • java压缩文件乱码问题
    用java来打包文件生成压缩文件,有两个地方会出现乱码:内容的中文乱码问题:修改sun的源码。使用开源的类库org.apache.tools.zip.ZipOutputStream和org.apache.tools.zip.ZipEntry...
    99+
    2019-05-09
    java 乱码
  • PHP怎么解决中文乱码问题
    这篇文章主要介绍“PHP怎么解决中文乱码问题”,在日常操作中,相信很多人在PHP怎么解决中文乱码问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP怎么解决中文乱码问题”的疑惑有所帮助!接下来,请跟着小编...
    99+
    2023-06-17
  • php压缩中文文件名乱码怎么办
    这篇文章给大家分享的是有关php压缩中文文件名乱码怎么办的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。php压缩中文文件名乱码的解决办法:首先将中文压缩包名用iconv函数转码;然后通过ZipArchive的对象...
    99+
    2023-06-15
  • PHP怎么解决AJAX中文乱码问题
    这篇文章主要介绍“PHP怎么解决AJAX中文乱码问题”,在日常操作中,相信很多人在PHP怎么解决AJAX中文乱码问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”PHP怎么解...
    99+
    2024-04-02
  • php fpdf中文乱码问题怎么解决
    FPDF是一款用于生成PDF文档的PHP类库,它允许生成PDF文件而无需使用PDF文档编辑器。但是,在使用FPDF生成中文PDF文档时,可能会出现中文乱码的问题。这个问题在一些网站论坛中也经常出现。如何解决这个问题呢?首先了解一下PDF文件...
    99+
    2023-05-14
  • python3 requests中文乱码之压缩格式问题解析
    我们在爬虫时,经常会遇见中文乱码问题,之前都是编码格式的问题,很少遇见由于压缩格式造成的编码混乱问题,特记录下。先看下混乱的编码样式。 b'a\xd4l\x00 G6\xb5...
    99+
    2024-04-02
  • 怎么解决php文件中文名乱码问题
    这篇文章主要介绍了怎么解决php文件中文名乱码问题,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。php文件中文名乱码的解决办法:1、在php文件的头部加入charset代码:...
    99+
    2023-06-22
  • 怎么解决php的exit中文乱码问题
    这篇文章将为大家详细讲解有关怎么解决php的exit中文乱码问题,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。本文操作环境:Windows7系统、PHP7.1版、DELL G3电脑如何解决p...
    99+
    2023-06-29
  • 怎么解决linux解压rar 乱码问题
    本篇内容主要讲解“怎么解决linux解压rar 乱码问题”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“怎么解决linux解压rar 乱码问题”吧!linux解压rar乱码的解决办法:1、安装RA...
    99+
    2023-06-22
  • 解压版MYSQL中文乱码问题解决方案
    安装的是解压版的MYSQL 解压之后copy 一个my.ini文件 然后添加字节编码配置: [client] default-character-set=gbk [mysqld] character-set-se...
    99+
    2022-05-29
    MYSQL 中文乱码
  • php压缩文件时文件夹乱码如何解决
    本篇内容介绍了“php压缩文件时文件夹乱码如何解决”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!php压缩文件时文件夹乱码的解决办法:1、修...
    99+
    2023-07-04
  • 如何解决 Ubuntu 中文乱码问题——文本、MP3和Rar压缩文件及aMule
    由于 Linux 中默认使用的编码是 UTF-8,与 Windows 的默认中文编码不同,因此在使用中会出现中文乱码问题。下面我们一起来看如何解决 Ubuntu 11.04 的一些中文乱码问题。 1. 解决文本乱码问...
    99+
    2022-06-03
    gedit Linux MP3 rar Ubuntu 中文乱码 压缩文件
  • java文件压缩乱码解决方法
    一、文件压缩的中文乱码问题中文文件名的乱码解决对于压缩的文件,当文件名称是中文时,若使用JDK API中自带的类(java.util.zip.ZipEntry; java.util.zip.ZipOutputStream;)进行压缩,压缩完...
    99+
    2021-05-16
    java 乱码
  • php怎么解决url中文传参乱码问题
    本文操作环境:Windows7系统、PHP7.1版、Dell G3电脑。php怎么解决url中文传参乱码问题?php url地址栏传中文乱码解决方法集合php地址栏传中文$_GET下来后乱码,urlencode和urldecode用法详解u...
    99+
    2018-12-07
    php url 中文乱码
  • php url 参数中文乱码问题怎么解决
    本教程操作环境:windows7系统、PHP8.1版、Dell G3电脑。php url 参数中文乱码问题怎么解决?PHP解决URL中文GBK乱码问题的两种方法一般情况下对URL进行UrlEncode 处理 , urlencode(),ur...
    99+
    2024-04-02
  • 怎么解决php读取word中文乱码问题
    这篇文章主要介绍“怎么解决php读取word中文乱码问题”,在日常操作中,相信很多人在怎么解决php读取word中文乱码问题问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”怎么解决php读取word中文乱码问题...
    99+
    2023-06-22
  • php html页面中文乱码问题怎么解决
    php html页面中文乱码问题的解决办法:1、在前端通过“”设置整个页面的字符编码;2、在php中通过“header("content-type:text/html; charset=xxx");”设置字符即可。本教程...
    99+
    2023-05-14
    php html 乱码
  • 怎么解决php中exec乱码问题
    这篇文章主要介绍怎么解决php中exec乱码问题,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!php exec乱码的解决办法:1、执行“exec("python cmd.py",$str);”;2...
    99+
    2023-06-22
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作