>  기사  >  백엔드 개발  >  PHP zip 중국어 문자가 깨졌을 때 대처 방법

PHP zip 중국어 문자가 깨졌을 때 대처 방법

藏色散人
藏色散人원래의
2021-09-15 11:25:192957검색

PHP zip의 중국어 문자 깨짐 해결 방법: 1. 해당 PHP 코드 파일을 엽니다. 2. PHP의 zip 캡슐화 프로토콜을 사용하여 압축을 풀어 ZipArchive 문자 깨짐 문제를 해결합니다.

PHP zip 중국어 문자가 깨졌을 때 대처 방법

이 글의 운영 환경: windows7 시스템, PHP7.1 버전, DELL G3 컴퓨터

중국어 php zip이 깨졌을 경우 어떻게 해야 하나요?

php에서 zip 파일 압축 풀기 문자 깨짐 문제

공식 작동 방법:

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

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

기존 문제

Windows 플랫폼에서 zip을 압축한 경우, Linux 서버에서 위 코드를 실행하면 문자 깨짐 현상이 발생하고 동시에 압축을 풀면 파일도 누락됩니다

해결 방법

문제 분석:

ZipArchive 왜곡된 문자는 일관성 없는 인코딩으로 인해 발생합니다. Windows 파일 시스템은 gbk로 인코딩되어 있지만 PHP ZipArchive의 파일 이름은 UTF입니다. -8 인코딩되었습니다. Zip 아카이브의 파일 이름에 중국어와 같은 특수 문자가 포함되어 있는 경우, 왜곡된 문자의 압축을 풀기 위해 PHP ZipArchive를 사용하는 것은 불가피합니다. ZipArchive 압축 파일이 왜곡되거나 압축할 수 없는 경우에도 동일한 이유가 적용됩니다.

해결책

ZipArchive 문서의 압축을 풀기 위해 내장된 ZipArchive::extractTo() 메서드를 사용하지 마세요. 대신 PHP의 zip 캡슐화 프로토콜을 사용하여 ZipArchive의 압축을 풀세요. 파일이 깨졌습니다.

코드 풀기

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

추천 학습: "PHP 비디오 튜토리얼"

위 내용은 PHP zip 중국어 문자가 깨졌을 때 대처 방법의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.