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($filePath, mb_convert_encoding($fileName, 'CP932', 'UTF-8'));

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

めでたしめでたし。

posted on 2022-04-13 10:41  caigan  阅读(661)  评论(0编辑  收藏  举报