前提・実現したいこと
PHPのZipArchiveクラスのextractToメソッドで展開したファイルの名前が日本語の時に文字化けする問題がありました。
オープンしたzipファイル内のファイル名がエンコードできれば問題が解決できそうなので、エンコードする方法を教えていただきたいです。
発生している問題・エラーメッセージ
PHP ZipArchive extractToで解凍した日本語ファイルが文字化けを参考にファイル名のエンコードができないかいろいろ試してみましたが、自分の環境ではできません。
「該当のソースコード」を動かすと下記が出力されます。
エンコード無しのファイル名:âeâXâg.pdf 文字コードチェックした結果:SJIS SJIS からUTF-8 にエンコードした結果:テ「eテ「Xテ「g.pdf SJIS-win からUTF-8 にエンコードした結果:テ「eテ「Xテ「g.pdf CP932 からUTF-8 にエンコードした結果:テ「eテ「Xテ「g.pdf UTF-8 からSJIS にエンコードした結果:?e?X?g.pdf UTF-8 からSJIS-win にエンコードした結果:?e?X?g.pdf UTF-8 からCP932 にエンコードした結果:?e?X?g.pdf
該当のソースコード
index.phpと同じディレクトリにある「テスト.zip」を読み込みます。
「テスト.zip」の中には「テスト.pdf」がいます。
PHP
1<?php 2 $zip = new ZipArchive; 3 if ($zip->open("./テスト.zip") === true) { 4 $idx = 0; 5 $zipEntry = $zip->statIndex($idx); 6 $entryName = $zipEntry['name']; 7 8 echo "エンコード無しのファイル名:" . $entryName . "<br>"; 9 10 $encode = mb_detect_encoding($entryName, "Shift-JIS,EUC-JP"); 11 echo "文字コードチェックした結果:" . $encode . "<br>"; 12 13 $to = "UTF-8"; 14 $from = "SJIS"; 15 $destName = mb_convert_encoding($entryName, $to, $from); 16 echo "$from から$to にエンコードした結果:" . $destName . "<br>"; 17 18 $to = "UTF-8"; 19 $from = "SJIS-win"; 20 $destName = mb_convert_encoding($entryName, $to, $from); 21 echo "$from から$to にエンコードした結果:" . $destName . "<br>"; 22 23 $to = "UTF-8"; 24 $from = "CP932"; 25 $destName = mb_convert_encoding($entryName, $to, $from); 26 echo "$from から$to にエンコードした結果:" . $destName . "<br>"; 27 28 $to = "SJIS"; 29 $from = "UTF-8"; 30 $destName = mb_convert_encoding($entryName, $to, $from); 31 echo "$from から$to にエンコードした結果:" . $destName . "<br>"; 32 33 $to = "SJIS-win"; 34 $from = "UTF-8"; 35 $destName = mb_convert_encoding($entryName, $to, $from); 36 echo "$from から$to にエンコードした結果:" . $destName . "<br>"; 37 38 $to = "CP932"; 39 $from = "UTF-8"; 40 $destName = mb_convert_encoding($entryName, $to, $from); 41 echo "$from から$to にエンコードした結果:" . $destName . "<br>"; 42 43 $zip->close(); 44 } 45?>
補足情報(FW/ツールのバージョンなど)
環境
OS:Windows10
zipファイル:Windows10で圧縮
PHPバージョン:8.0.1
追記
圧縮のコード
index.phpと同じディレクトリの「テスト.pdf」ファイルを「テスト2.zip」というファイル名で同じディレクトリに圧縮
if ($zip->open("./テスト2.zip", ZipArchive::CREATE|ZipArchive::OVERWRITE) === true) { $zip->addFile('./テスト.pdf'); $zip->close(); }
結果は「テスト2.zip」というファイルができますが、ダブルクリックしても「このフォルダーは空です。」となります。
回答1件
あなたの回答
tips
プレビュー