Rumah  >  Artikel  >  pembangunan bahagian belakang  >  Bagaimana untuk menangani aksara Cina yang kacau dalam zip php

Bagaimana untuk menangani aksara Cina yang kacau dalam zip php

藏色散人
藏色散人asal
2021-09-15 11:25:192952semak imbas

Penyelesaian kepada aksara Cina bercelaru dalam zip php: 1. Buka fail kod PHP yang sepadan 2. Gunakan protokol pengkapsulan zip PHP untuk menyahmampat untuk menyelesaikan masalah aksara bercelaru ZipArchive.

Bagaimana untuk menangani aksara Cina yang kacau dalam zip php

Persekitaran pengendalian artikel ini: sistem windows7, versi PHP7.1, komputer DELL G3

Apakah yang perlu saya lakukan jika kod kacau Cina dalam zip php digunakan?

fail zip penyahmampatan php bermasalah

Kaedah operasi rasmi:

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

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

Masalah sedia ada

Jika zip dimampatkan pada platform Windows, kemudian melaksanakan kod di atas pada pelayan Linux akan mengakibatkan aksara bercelaru dan fail yang dinyahmampat juga akan hilang

Penyelesaian

Analisis Masalah:

ZipArchive aksara bercelaru disebabkan oleh pengekodan yang tidak konsisten Sistem fail Windows dikodkan secara gbk, manakala nama fail dalam PHP ZipArchive dikodkan UTF-8. Jika nama fail dalam arkib Zip mengandungi aksara khas seperti bahasa Cina, ia tidak dapat dielakkan untuk menggunakan PHP ZipArchive untuk menyahmampat aksara yang bercelaru. Sebab yang sama terpakai apabila fail termampat ZipArchive bercelaru atau tidak boleh dimampatkan.

Penyelesaian

Jangan gunakan kaedah ZipArchive::extractTo() terbina dalam untuk menyahmampat fail ZipArchive, gunakan PHP sebaliknya Protokol pembungkusan zip dinyahmampat untuk menyelesaikan kod bercelaru ZipArchive.

Kod penyelesaian

<?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));

Pembelajaran yang disyorkan: "Tutorial Video PHP"

Atas ialah kandungan terperinci Bagaimana untuk menangani aksara Cina yang kacau dalam zip php. Untuk maklumat lanjut, sila ikut artikel berkaitan lain di laman web China PHP!

Kenyataan:
Kandungan artikel ini disumbangkan secara sukarela oleh netizen, dan hak cipta adalah milik pengarang asal. Laman web ini tidak memikul tanggungjawab undang-undang yang sepadan. Jika anda menemui sebarang kandungan yang disyaki plagiarisme atau pelanggaran, sila hubungi admin@php.cn