2015-07-05 16 views
13

Bir .zip dosyasını ayıklamak için PHP ZipArchive sınıfını kullanıyorum, İngilizce için iyi çalışıyor, ancak yerel dilimde sorunlara (THAI) neden oluyor.Hata Ayıklanan Bir Zip Dosyasını Diğer Dillere Yeniden Adlandırma PHP

utf-8 to THAI dönüştürmek için icov('utf-8','windows-874',$zip->getNameIndex($i)) kullanıyorum. Bu klasörün/dosyanın adını çalışır, ancak çıkarılan .zip dosyası için çalışmak ve bu hataya neden olmaz:

iconv(): algılandı giriş dizesinde geçersiz bir karakter

kimse söyleyebilir misiniz sorun ne burada? Ben sıkıştırılmış dosyayı ayıklamak sonra

My PHP kodu

$file = iconv('utf-8', 'windows-874', $_GET['File']); 
$path = iconv('utf-8', 'windows-874', $_GET['Path']); 

$zip = new ZipArchive; 
if ($zip->open($file) === TRUE) { 
    // convert to Thai language 
    for($i = 0; $i < $zip->numFiles; $i++) { 
     $name = $zip->getNameIndex($i); 
     //echo iconv("charset zip file", "windows-874", $name); 
     //$zip->extractTo($path,$name); -> this problem 
    } 
    $zip->close(); 
    echo json_encode('unZip!!!'); 
} else { 
    echo json_encode('Failed'); 
} 

, dosyanın adı bunun için ayarlanmış biri değildir. , Iyi çalışıyor ben windows XP Sıkıştırılmış dosyayı çıkarttıktan çalıştı

https://www.dropbox.com/s/9f4j04lkvsyuy63/test.zip?dl=0

GÜNCELLEME: Burada This is name i try to set :

benim sıkıştırılmış dosyasıdır: After I extract the zipped file, The file's name is not the one I set for it.

Bu i kurmayı deneyin addır orada ama Windows 7'de değil.

+0

Dizenin aslında içerdiği şeyi göstermedikçe kimse anlayamaz. (ZIP dosyaları Unicode desteği için gerçekten bilinmemektedir. Çoğu araç sadece yerel karakter kümelerini kullanır.) – mario

+1

İçeriği gerçekten çıkarmak için kullandığınız kod nerede? Bir yere hata veren bir zip dosyasının en az bir örneğini yükleyebilir misiniz (içeriğini ayıklamak için kullandığınız kodu ekledikten sonra)? – MatsLindh

+2

ama "utf8" ile "THAI" çalışmak daha iyi değil mi? Bunu "windows-874" konumuna dönüştürme ihtiyacı nedir? –

cevap

1

Muhtemelen'ü denemelisiniz. Bununla ilgili yardım için- aşağıdaki kodu inceleyin. Yolunda bir sorun varsa, bu kod üzerinde genişletmeniz gerekebilir. Bunu yapman gerekiyorsa sadece bir döngü kullanın.

$file = iconv('utf-8', 'windows-874', $_GET['File']); 
$path = iconv('utf-8', 'windows-874', $_GET['Path']); 

$zip = new ZipArchive; 
if ($zip->open($file) === TRUE) { 
    // convert to Thai language 
    for($i = 0; $i < $zip->numFiles; $i++) { 
     $name = $zip->getNameIndex($i); 
     $order = mb_detect_order(); 
     $encoding = mb_detect_encoding($name, $order, true); 
     if (FALSE === $encoding) { 
      throw new UnexpectedValueException(
       sprintf(
        'Unable to detect input encoding with mb_detect_encoding, order was: %s' 
       , print_r($order, true) 
       ) 
      ); 
     } else { 
      $encoding = mb_detect_encoding($name); 
      $stringUtf8 = iconv($encoding, 'UTF-8//IGNORE', $name); 
      $zip->extractTo($path,$stringUtf8); 
     } 
    } 
    $zip->close(); 
    echo json_encode('unZip!!!'); 
} else { 
    echo json_encode('Failed'); 
} 
+0

Kodunuz için teşekkür ederiz, ama çalışmıyor ve ben ingilizceye değiştiriyorum. Tay dosya adından daha kolay. Çok teşekkür ederim –

İlgili konular