2015-07-05 28 views
13

Ich benutze PHP ZipArchive-Klasse, um eine. Zip-Datei zu extrahieren, Es funktioniert gut für Englisch, sondern verursachen Probleme in meiner lokalen Sprache (THAI).Fehler beim Umbenennen einer extrahierten Zip-Datei in andere Sprachen In PHP

Ich benutze icov('utf-8','windows-874',$zip->getNameIndex($i)), um utf-8 zu THAI zu konvertieren. Es funktioniert für Ordner/der Datei den Namen, aber für extrahiert Zip-Datei nicht funktioniert und diesen Fehler verursachen:

iconv(): Erkannte ein unzulässiges Zeichen in Eingabestring

Kann jemand bitte sagen Ich, was ist das Problem hier?

Mein PHP-Code

$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'); 
} 

Nachdem ich die ZIP-Datei zu extrahieren, Der Name der Datei ist nicht das, was ich für sie festgelegt. After I extract the zipped file, The file's name is not the one I set for it.

Dies ist der Name ich versuche zu setzen: meine ZIP-Datei This is name i try to set :

hier:

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

UPDATE
ich die Datei in Windows XP versucht unzipping, es funktioniert gut dort aber nicht in Windows 7.

+0

Niemand kann sagen, wenn Sie nicht zeigen, was die Zeichenfolge tatsächlich enthält. (ZIP-Dateien sind eigentlich nicht für die Unterstützung von Unicode bekannt. Die meisten Tools verwenden nur lokale Zeichensätze asis.) – mario

+1

Wo ist der Code, den Sie zum tatsächlichen Extrahieren des Inhalts verwenden? Können Sie ein minimales Beispiel einer ZIP-Datei hochladen, die den Fehler irgendwo anzeigt (nachdem Sie den Code hinzugefügt haben, den Sie zum Extrahieren des Inhalts verwenden)? – MatsLindh

+2

aber es ist nicht besser, das "THAI" mit "utf8" trotzdem zu bearbeiten? Was ist die Notwendigkeit, es in 'Windows-874' zu konvertieren? –

Antwort

1

Sie sollten wahrscheinlichversuchenfür Hilfe mit diesem - siehe den Code unten. Möglicherweise müssen Sie diesen Code erweitern, wenn Sie auch einen Problem mit seinem Pfad haben. Verwenden Sie einfach eine Schleife, wenn Sie dies tun müssen.

$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

Vielen Dank für Ihren Code, aber funktioniert nicht und ich wechsle auf Englisch. Es ist einfacher als der Name der Thai-Datei. Vielen Dank –