PHP zip의 중국어 문자 깨짐 해결 방법: 1. 해당 PHP 코드 파일을 엽니다. 2. PHP의 zip 캡슐화 프로토콜을 사용하여 압축을 풀어 ZipArchive 문자 깨짐 문제를 해결합니다.
이 글의 운영 환경: 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 중국어 웹사이트의 기타 관련 기사를 참조하세요!