2011-02-15 13 views
6

Bir zip arşivi oluşturmak için php ZipArchive sınıfını kullanıyorum. Arşivdeki dosyanın ismini ayarlamak için addFile yönteminin ikinci parametresini kullanıyorum (diskteki gerçek dosya farklı bir ada sahip olduğundan). Bazı isimler fransız aksan içermelidir (& eacute; gibi). Arşivi indirdiğimde, aksanlar dosya adında doğru şekilde gösterilmiyor. Dosya adları için hangi kodlamayı kullanmalıyım? (uygulama UTF-8 kullanır)ZipArchive, oluşturulan arşiv içindeki dosya isimlerini saklamak için hangi kodlamayı kullanır?

+0

Zip oldukça eski biçimi, ve Unicode eskidir. Formatın daha eski 2007 öncesi sürümleri büyük olasılıkla standart genişletilmiş ascii kullanıyor. '07'den sonra, yeni özellikler UTF-8 için izin verdi. Oluşturduğunuz dosya sürümünü kontrol edin. –

cevap

2

Zip dosyalarında belirtilen bir kodlama yoktur; Arşiv aracı, kullanılan kodlamayı tahmin etmeli (veya üstlenmelidir). Önce CP1252'yi dene, sonra oradan git.

+1

Çalışmıyor. ISO-8859-1, CP1252 ve CP850'yi sorunsuz olarak denedim – matei

+0

Bir dosya adının bayt dizisi neye benziyor ve metinde olması gereken şey nedir? –

4

DOS kodlamasını kullan. Dosya adlarımda kiril alfabesi karakterleri var, bu yüzden dosya adlarını (Windows) ile cp866 (DOS) arasında kodlayarak $zip->addFile() dosya adının dosya adına aktarıyorum.

+0

Teşekkürler bir demet! Hangi kodlamaların kullanıldığını tam olarak nasıl anladınız? – YakovL

9

Bu php hatasıdır # 53948, bkz official bug report. (Benim için çalıştı)

Önerilen çözüm:

$zip->addFile($file, iconv("UTF-8", "CP852", $local_name)); 
İlgili konular