這篇“php壓縮中文亂碼問題如何解決”文章的知識點大部分人都不太理解,所以小編給大家總結(jié)了以下內(nèi)容,內(nèi)容詳細(xì),步驟清晰,具有一定的借鑒價值,希望大家閱讀完這篇文章能有所收獲,下面我們一起來看看這篇“php壓縮中文亂碼問題如何解決”文章吧。
創(chuàng)新互聯(lián)公司,為您提供重慶網(wǎng)站建設(shè)公司、成都網(wǎng)站制作、網(wǎng)站營銷推廣、網(wǎng)站開發(fā)設(shè)計,對服務(wù)辦公窗簾等多個行業(yè)擁有豐富的網(wǎng)站建設(shè)及推廣經(jīng)驗。創(chuàng)新互聯(lián)公司網(wǎng)站建設(shè)公司成立于2013年,提供專業(yè)網(wǎng)站制作報價服務(wù),我們深知市場的競爭激烈,認(rèn)真對待每位客戶,為客戶提供賞心悅目的作品。 與客戶共同發(fā)展進步,是我們永遠(yuǎn)的責(zé)任!
php壓縮中文亂碼的解決方法:1、通過“composer require nelexa/zip”安裝PhpZip;2、打開“ZipFile.php”;3、找到“extractTo”方法,將“is_writable”函數(shù)改掉或去掉;4、轉(zhuǎn)換一下編碼格式即可。
解決php使用ZipArchive解壓時中文亂碼問題(純php,繞開ZipArchive)
解決php使用ZipArchive解壓時中文亂碼問題
使用php自帶的ZipArchive來解壓帶中文文件名壓縮包時會造成亂碼,現(xiàn)象如下:
網(wǎng)上查閱基本上給出的答案大同小異,自己照著同樣的方法試了都不能解決,下圖是網(wǎng)上給出的方案:
經(jīng)過摸索終于找到了解決方案,那就是棄用ZipArchive,選擇其他的途徑,經(jīng)過比較我選擇了“PhpZip”,優(yōu)點是:純php(不需要擴展和類),下面介紹安裝方法:
composer安裝:
登錄后復(fù)制composer require nelexa/zip
如果選擇版本的話:composer require nelexa/zip:^3.0 (3.0版本號)
使用方法:
登錄后復(fù)制//解壓文件
$fileAddess = "壓縮包地址";
$toDir = "解壓目錄";
$zipFile = new \PhpZip\ZipFile();
$zipFile->openFile($fileAddess) // open archive from file
->extractTo($toDir); // extract files to the specified directory
$zipFile->close();
注釋:(**如果安裝好使用正常請忽略下面的注釋內(nèi)容**)
1.我的壓縮包放在共享盤里面連接的是smb地址,可能會出現(xiàn)報錯:"Destination is not writable directory",這個坑已經(jīng)踩過:打開ZipFile.php這個文件,找到“extractTo”方法,將“is_writable”函數(shù)改掉,或者去掉,然后再轉(zhuǎn)換一下編碼格式!,下面有注釋的是我修改的內(nèi)容!
/**
* 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;
}
以上就是關(guān)于“php壓縮中文亂碼問題如何解決”這篇文章的內(nèi)容,相信大家都有了一定的了解,希望小編分享的內(nèi)容對大家有幫助,若想了解更多相關(guān)的知識內(nèi)容,請關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。
網(wǎng)頁名稱:php壓縮中文亂碼問題如何解決
URL地址:http://jinyejixie.com/article48/poeohp.html
成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供外貿(mào)建站、軟件開發(fā)、外貿(mào)網(wǎng)站建設(shè)、動態(tài)網(wǎng)站、標(biāo)簽優(yōu)化、網(wǎng)站設(shè)計
聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶投稿、用戶轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請盡快告知,我們將會在第一時間刪除。文章觀點不代表本網(wǎng)站立場,如需處理請聯(lián)系客服。電話:028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時需注明來源: 創(chuàng)新互聯(lián)