php zip 中国語文字化けの解決策: 1. 対応する PHP コード ファイルを開きます; 2. PHP の zip カプセル化プロトコルを使用して解凍し、ZipArchive の文字化け問題を解決します。
この記事の動作環境: 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 サイトの他の関連記事を参照してください。