怎麼解決php壓縮中文亂碼問題
php壓縮中文亂碼的解決方法:1、透過「composer require nelexa/zip」安裝PhpZip;2、開啟「ZipFile.php」;3、找到「extractTo」方法,將「is_writable」函數改掉或去掉;4、轉換一下編碼格式即可。
本教學操作環境:windows7系統、PHP8.1版、Dell G3電腦。
怎麼解決php壓縮中文亂碼問題?
解決php使用ZipArchive解壓縮時中文亂碼問題(純php,繞開ZipArchive)
解決php使用ZipArchive解壓縮時中文亂碼問題
使用php自帶的ZipArchive來解壓縮帶中文文件名壓縮包時會造成亂碼,現像如下:
網上查閱基本上給出的答案大同小異,自己照著同樣的方法試了都無法解決,下圖是網路上給出的方案:
經過摸索終於找到了解決方案,那就是棄用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」函數改掉,或去掉,然後再轉換編碼格式! ,以下有註解的是我修改的內容!
/** * Extract the archive contents * * Extract the complete archive or the given files to the specified destination. * * @param string $destination Location where to extract the files. * @param array|string|null $entries The entries to extract. It accepts either * a single entry name or an array of names. * @return ZipFile * @throws ZipException */ 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"); } /** * @var ZipEntry[] $zipEntries */ 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) { /** * @var ZipEntry $zipEntry */ return isset($flipEntries[$zipEntry->getName()]); } ); } } else { $zipEntries = $this->centralDirectory->getEntries(); } foreach ($zipEntries as $entry) { /******************************王天佑添加的逻辑start************************************/ header("Content-type:text/html;charset=bgk"); $entry_getName = iconv('GB2312', 'UTF-8//ignore',$entry->getName()); //header("Content-type:text/html;charset=utf-8"); /******************************王天佑添加的逻辑start************************************/ $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影片教學》
以上是怎麼解決php壓縮中文亂碼問題的詳細內容。更多資訊請關注PHP中文網其他相關文章!

熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

記事本++7.3.1
好用且免費的程式碼編輯器

SublimeText3漢化版
中文版,非常好用

禪工作室 13.0.1
強大的PHP整合開發環境

Dreamweaver CS6
視覺化網頁開發工具

SublimeText3 Mac版
神級程式碼編輯軟體(SublimeText3)

熱門話題

PHP 8.4 帶來了多項新功能、安全性改進和效能改進,同時棄用和刪除了大量功能。 本指南介紹如何在 Ubuntu、Debian 或其衍生版本上安裝 PHP 8.4 或升級到 PHP 8.4

Visual Studio Code,也稱為 VS Code,是一個免費的原始碼編輯器 - 或整合開發環境 (IDE) - 可用於所有主要作業系統。 VS Code 擁有大量針對多種程式語言的擴展,可以輕鬆編寫

本教程演示瞭如何使用PHP有效地處理XML文檔。 XML(可擴展的標記語言)是一種用於人類可讀性和機器解析的多功能文本標記語言。它通常用於數據存儲

JWT是一種基於JSON的開放標準,用於在各方之間安全地傳輸信息,主要用於身份驗證和信息交換。 1.JWT由Header、Payload和Signature三部分組成。 2.JWT的工作原理包括生成JWT、驗證JWT和解析Payload三個步驟。 3.在PHP中使用JWT進行身份驗證時,可以生成和驗證JWT,並在高級用法中包含用戶角色和權限信息。 4.常見錯誤包括簽名驗證失敗、令牌過期和Payload過大,調試技巧包括使用調試工具和日誌記錄。 5.性能優化和最佳實踐包括使用合適的簽名算法、合理設置有效期、

字符串是由字符組成的序列,包括字母、數字和符號。本教程將學習如何使用不同的方法在PHP中計算給定字符串中元音的數量。英語中的元音是a、e、i、o、u,它們可以是大寫或小寫。 什麼是元音? 元音是代表特定語音的字母字符。英語中共有五個元音,包括大寫和小寫: a, e, i, o, u 示例 1 輸入:字符串 = "Tutorialspoint" 輸出:6 解釋 字符串 "Tutorialspoint" 中的元音是 u、o、i、a、o、i。總共有 6 個元

靜態綁定(static::)在PHP中實現晚期靜態綁定(LSB),允許在靜態上下文中引用調用類而非定義類。 1)解析過程在運行時進行,2)在繼承關係中向上查找調用類,3)可能帶來性能開銷。

PHP的魔法方法有哪些? PHP的魔法方法包括:1.\_\_construct,用於初始化對象;2.\_\_destruct,用於清理資源;3.\_\_call,處理不存在的方法調用;4.\_\_get,實現動態屬性訪問;5.\_\_set,實現動態屬性設置。這些方法在特定情況下自動調用,提升代碼的靈活性和效率。
