ホームページ >バックエンド開発 >PHPの問題 >PHP zipで中国語が文字化けする場合の対処方法

PHP zipで中国語が文字化けする場合の対処方法

藏色散人
藏色散人オリジナル
2021-09-15 11:25:193016ブラウズ

php zip 中国語文字化けの解決策: 1. 対応する PHP コード ファイルを開きます; 2. PHP の zip カプセル化プロトコルを使用して解凍し、ZipArchive の文字化け問題を解決します。

PHP zipで中国語が文字化けする場合の対処方法

この記事の動作環境: Windows 7 システム、PHP 7.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));

既存の問題

zipだとWindows プラットフォームでは圧縮されているため、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 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。