ホームページ >バックエンド開発 >PHPチュートリアル >PHP ZipArchive は圧縮パッケージ内の中国語のファイル名をどのように処理しますか?

PHP ZipArchive は圧縮パッケージ内の中国語のファイル名をどのように処理しますか?

WBOY
WBOYオリジナル
2023-07-21 12:04:481275ブラウズ

PHP ZipArchive は圧縮パッケージ内の中国語のファイル名をどのように処理しますか?

開発では、ファイルの圧縮と解凍が必要になることがよくあります。PHP では、このニーズを満たすために ZipArchive 拡張機能が提供されています。ただし、中国語のファイル名を扱う場合、いくつかの問題が発生する可能性があります。この記事では、ZipArchive を使用して圧縮パッケージ内の中国語のファイル名を正しく処理する方法を紹介します。

ZipArchive を使用して圧縮パッケージを作成する場合は、ファイル名のエンコードに注意する必要があります。デフォルトでは、ZipArchive は GBK エンコードを使用しますが、中国語のファイル名は通常 UTF-8 エンコードを使用します。中国語のファイル名が正しく表示されるようにするには、ファイル名を GBK エンコードに変換する必要があります。

次は、圧縮パッケージを作成し、中国語のファイル名を追加するサンプル コードです:

$zip = new ZipArchive();
$filename = 'archive.zip';

if ($zip->open($filename, ZipArchive::CREATE | ZipArchive::OVERWRITE) === true) {
    $file1 = '中文文件.txt';
    
    // 转换文件名为GBK编码
    $file1_gb2312 = iconv('UTF-8', 'GBK//IGNORE', $file1);
    
    // 在压缩包中添加文件
    $zip->addFile($file1, $file1_gb2312);
    
    // 关闭压缩包
    $zip->close();
    
    echo '压缩包创建成功';
} else {
    echo '创建压缩包失败';
}

上記のコードでは、最初に ZipArchive オブジェクトを作成し、圧縮パッケージの名前を指定します。 。次に、圧縮パッケージを開いて中国語ファイルを追加しました。ファイルを追加する場合、iconv 関数を使用してファイル名を UTF-8 エンコードから GBK エンコードに変換し、変換されたファイル名を追加操作に使用します。最後に、アーカイブを閉じて結果を出力します。

次に、中国語のファイル名を含む圧縮パッケージを解凍する方法を見てみましょう。解凍する前に、ファイル名を GBK エンコードから UTF-8 エンコードに変換する必要があります。

次は、圧縮パッケージを解凍し、中国語のファイル名を処理するためのサンプル コードです。

$zip = new ZipArchive();
$filename = 'archive.zip';

if ($zip->open($filename) === true) {
    $destination = 'extracted/';
    
    // 创建解压目录
    if (!is_dir($destination)) {
        mkdir($destination);
    }
    
    // 解压文件并处理中文文件名
    for ($i = 0; $i < $zip->numFiles; $i++) {
        $entry = $zip->statIndex($i);
        $file_gb2312 = $entry['name'];
        
        // 转换文件名为UTF-8编码
        $file_utf8 = iconv('GBK', 'UTF-8//IGNORE', $file_gb2312);
        
        // 解压文件
        $zip->extractTo($destination, $file_gb2312);
        
        // 重命名文件
        rename($destination . $file_gb2312, $destination . $file_utf8);
    }
    
    // 关闭压缩包
    $zip->close();
    
    echo '解压成功';
} else {
    echo '打开压缩包失败';
}

上記のコードでは、最初に ZipArchive オブジェクトを作成し、解凍する圧縮パッケージを開きます。次に、解凍​​されたディレクトリを作成し、ループを使用してアーカイブ内のすべてのファイルを反復処理しました。ファイルごとにファイル名を取得し、GBK エンコードから UTF-8 エンコードに変換します。次に、extractTo メソッドを使用してファイルを抽出し、rename 関数を使用してファイルの名前を変換されたファイル名に変更します。最後に、アーカイブを閉じて結果を出力します。

上記のコード例により、圧縮パッケージ内の中国語のファイル名を正しく処理し、ファイル名が正しく表示および操作できることを確認できます。ファイルの圧縮と解凍は、ZipArchive 拡張機能を使用して簡単に実行でき、中国語のファイル名を処理するさまざまな方法が提供されます。この記事があなたの開発作業に役立つことを願っています。

以上がPHP ZipArchive は圧縮パッケージ内の中国語のファイル名をどのように処理しますか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

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