2011-02-15 5 views
6

私はzipアーカイブを生成するためにphp ZipArchiveクラスを使用しています。私はaddFileメソッドの2番目のパラメータを使用してアーカイブ内のファイル名を設定します(ディスク上の実際のファイルは異なる名前を持つため)。一部の名前にはフランスアクセント記号(&など)を含める必要があります。アーカイブをダウンロードすると、アクセントがファイル名に正しく表示されません。ファイル名にはどのようなエンコーディングを使用する必要がありますか? (アプリケーションはUTF-8を使用します)ZipArchiveは、作成したアーカイブ内にファイル名を格納するためにどのエンコードを使用しますか?

+0

Zipは、かなり古い形式だと、Unicodeを先行し。 2007年以前の旧バージョンのフォーマットは、おそらく標準の拡張asciiを使用するだけです。 '07年以降、新しい仕様ではUTF-8が許可されました。生成しているファイルのバージョンを確認してください。 –

答えて

2

Zipファイルには指定されたエンコードがありません。アーカイブツールは使用されたエンコーディングを推測(または仮定)する必要があります。最初にCP1252を試してから、そこから行ってください。

+1

動作しません。私はISO-8859-1、CP1252およびCP850を成功させずに試しました。 – matei

+0

ファイル名のバイトシーケンスはどのようなものになりますか?テキストには何が含まれていますか? –

4

DOSエンコードを使用してください。私のファイル名にはキリル文字が含まれているので、$zip->addFile()にファイル名を渡すと、cp1251(Windows)からcp866(DOS)にファイル名がエンコードされます。

+0

ありがとう!あなたはどのように使用するエンコーディングを正確に考えましたか? – YakovL

9

これはPHPバグ#53948です(official bug reportを参照)。 (私のために働いていた)

推奨回避策:

$zip->addFile($file, iconv("UTF-8", "CP852", $local_name)); 
関連する問題