Rumah >pembangunan bahagian belakang >masalah PHP >Bagaimana untuk menangani aksara Cina yang kacau dalam zip php
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.
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!