Heim >Backend-Entwicklung >PHP-Problem >Wie man mit verstümmelten chinesischen Zeichen in PHP Zip umgeht

Wie man mit verstümmelten chinesischen Zeichen in PHP Zip umgeht

藏色散人
藏色散人Original
2021-09-15 11:25:193009Durchsuche

Lösung für verstümmelte chinesische Zeichen in PHP-ZIP: 1. Öffnen Sie die entsprechende PHP-Codedatei. 2. Verwenden Sie zum Dekomprimieren das Zip-Kapselungsprotokoll von PHP, um das Problem der verstümmelten ZipArchive-Zeichen zu lösen.

Wie man mit verstümmelten chinesischen Zeichen in PHP Zip umgeht

Die Betriebsumgebung dieses Artikels: Windows7-System, PHP7.1-Version, DELL G3-Computer

Was soll ich tun, wenn die chinesische PHP-Zip-Datei verstümmelt ist?

php dekomprimiert die Zip-Datei verstümmelt Problem

Offizielle Betriebsmethode:

<?php
$zip = new \ZipArchive;
$zipfile = "./test.zip";
$res = $zip->open($zipfile);
$toDir = "./test";

$s = $zip->extractTo($toDir);
print_r(scandir($toDir));

Bestehende Probleme

Wenn die Zip-Datei auf der Windows-Plattform komprimiert ist, führt die Ausführung des obigen Codes auf dem Linux-Server zu verstümmelten Zeichen und dekomprimiert sie Gleichzeitig fehlen auch die Dateien

Lösung

Problemanalyse:

ZipArchive-verstümmelte Zeichen werden durch inkonsistente Codierung verursacht, während die Dateinamen in PHP ZipArchive UTF-8 sind kodiert. Wenn der Dateiname im Zip-Archiv Sonderzeichen wie Chinesisch enthält, ist es unumgänglich, PHP ZipArchive zu verwenden, um die verstümmelten Zeichen zu dekomprimieren. Der gleiche Grund gilt, wenn ZipArchive-komprimierte Dateien verstümmelt sind oder nicht komprimiert werden können.

Lösung

Verwenden Sie nicht die integrierte ZipArchive::extractTo()-Methode, um ZipArchive-Dokumente zu dekomprimieren Dateien. Verstümmelte Zeichen.

Lösen Sie den Code

<?php
$zip = new \ZipArchive;
$zipfile = "./test.zip";
$res = $zip->open($zipfile);

$toDir = "./test";
if(!file_exists($toDir)) {
   mkdir($toDir);
}
$docnum = $zip->numFiles;
for($i = 0; $i < $docnum; $i++) {
   $statInfo = $zip->statIndex($i);
   if($statInfo['crc'] == 0) {
       //新建目录
       mkdir($toDir.'/'.substr($statInfo['name'], 0,-1));
   } else {
       //拷贝文件
       copy('zip://'.$zipfile.'#'.$statInfo['name'], $toDir.'/'.$statInfo['name']);
   }
}

print_r(scandir($toDir));

Empfohlenes Lernen: „PHP-Video-Tutorial

Das obige ist der detaillierte Inhalt vonWie man mit verstümmelten chinesischen Zeichen in PHP Zip umgeht. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn