phpでZipArchiveを使ったら日本語のファイル名が文字化けした話

目次

php作ったzipを解凍すると文字化け

phpで複数のファイルをまとめてダウンロードしたい→じゃあzipに圧縮してダウンロードしよう。

ということでZipArchiveを使ってzipファイルにしてダウンロードしましたがLhaplusで解凍するとファイル名が文字化けしました。

※因みに、エクスプローラーで開くと文字化けしません。

 

原因は文字コード

調べたところ、原因は文字コードにあったらしい。

zipに格納された日本語ファイル名の文字コードはCP932なのに、Windows環境ではZipArchiveで圧縮するときにUTF-8とみなして変換してしまうのだとか。

※因みに、linux環境で圧縮した場合は問題ないらしいです。

 

mb_convert_encodingで解決

エクスプローラーで開くと文字化けしないとはいえ、不便に違いないので直すことに。

文字コードをUTF-8にしてしまうのであれば、addFileするときにCP932に変換してやればいいので、

追加するファイル名をmb_convert_encodingでエンコードする。

$zip->addFile($filePathmb_convert_encoding($fileName'CP932''UTF-8'));

これで無事Lhaplusでも解凍できました。

めでたしめでたし。