> 백엔드 개발 > PHP 문제 > PHP ziparchive에 중국어 문자가 깨져 있으면 어떻게 해야 합니까?

PHP ziparchive에 중국어 문자가 깨져 있으면 어떻게 해야 합니까?

藏色散人
풀어 주다: 2023-03-10 06:56:01
원래의
2259명이 탐색했습니다.

PHP ziparchive의 중국어 왜곡 문자에 대한 해결 방법: 먼저 압축 패키지를 열고 내부 파일 이름과 디렉터리를 트랜스코딩한 다음 트랜스코딩 후 압축 패키지를 닫고 압축을 풀기 위해 다시 엽니다.

PHP ziparchive에 중국어 문자가 깨져 있으면 어떻게 해야 합니까?

이 문서의 운영 환경: Windows 7 시스템, PHP 버전 7.1, DELL G3 컴퓨터

ZipArchive를 사용하여 PHP의 압축을 풀 때 중국어 문자 왜곡 문제에 대한 해결 방법

PHP 자체 ZipArchive를 사용하여 압축 해제 중국어 파일 이름을 가진 패키지는 문자 깨짐 현상이 발생하며 현상은 다음과 같습니다.

원본 구조:

 

압축 해제 코드:

$zip = new \ZipArchive();
$res = $zip->open('./钱学森班.zip');
if ($res !== true){    
throw new \Exception('打开压缩包失败');
}$zip->extractTo('./cache');
$zip->close();
로그인 후 복사

압축 해제 후:

 

Reason

기본값은 Windows입니다. Mac에서 패키지를 압축하는데 인코딩이 중국어 간체입니다. 압축을 풀 때 파일 변환 실패로 인해 압축 해제 결과가 예상과 다릅니다

해결책

압축된 패키지를 연 후 먼저 내부 파일 이름과 디렉터리를 트랜스코딩하세요. 트랜스코딩을 수행하려면 압축 패키지를 닫고 압축 해제를 다시 시작해야 합니다

구현 방법은 다음과 같습니다.

$zipName = './钱学森班.zip';
$zip = new \ZipArchive();
$res = $zip->open($zipName);
if ($res !== true){
    throw new \Exception('打开压缩包失败');
}

// 加入此段↓
$fileNum = $zip->numFiles;
for ($i = 0; $i < $fileNum; $i++) {
    $statInfo = $zip->statIndex($i, ZipArchive::FL_ENC_RAW);
    $zip->renameIndex($i, iconv(&#39;GBK&#39;, &#39;utf-8//IGNORE&#39;, $statInfo[&#39;name&#39;]));
}
$zip->close();
$zip->open($zipName);
// 截至↑

$zip->extractTo($extractTo);
$zip->close();
로그인 후 복사

참고 사항

  • 트랜스코딩 후 원본 압축 패키지 파일이 수정되었기 때문에 다시 트랜스코딩할 수 없습니다. 원본 파일에 영향을 미치고 싶지 않다면 먼저 복사해야 합니다 (php-zip 확장자는 파일 스트림을 자체적으로 읽으므로 복사가 필요하지 않습니다)
  • 변환 전 인코딩 판단을 위해 mb_Detect_encoding을 사용하면 여전히 UTF-8이 반환됩니다

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

위 내용은 PHP ziparchive에 중국어 문자가 깨져 있으면 어떻게 해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

관련 라벨:
원천:php.cn
본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.
인기 튜토리얼
더>
최신 다운로드
더>
웹 효과
웹사이트 소스 코드
웹사이트 자료
프론트엔드 템플릿