Roman Piekarski

Roman Piekarski Programista do
wynajęcia

Temat: ziparchive i krzaki przy polskich znakach

Witam,

Mam problem podczas archiwizowania. W momencie gdy w sklad paczki zip wchodza pliki których nazwy posiadają polskie znaki, zamiast tych znaków dostaje w paczce krzaki. Co dziwne jezeli sciagam pliki bezposrednio jeden po drugin a nie w formie paczki, kazdy z nich posiada poprawna kompresje. Wina musi leżeń po stronie ZipArchive.

Macie jakis pomysl?

P.s. Pliki fizycznie na dysku maja przypadkowe nazwy md5 dopiero w locie podczas pakowania przydzielane sa im nazwy originalne.
Adam Bąk

Adam Bąk Programista

Temat: ziparchive i krzaki przy polskich znakach

Też się spotkałem z tym problem... Ja najpierw zmieniałem nazwy żeby nie było polskich znaków... a używasz baz danych ??
bo można by było np. orginalnie nazwy zapisywać i je odpowiedniki (bez polskich znaków), tak teraz tylko myślę....Adam Bąk edytował(a) ten post dnia 23.09.10 o godzinie 13:01
Mariusz Roliński

Mariusz Roliński Full Stack Web
Developer

Temat: ziparchive i krzaki przy polskich znakach

Problem nie jest taki straszny. :)

Sytuacja wygląda następująco:
- Na serwerze nazwy plików kodowane są w CP1250;
- W plikach ZIP panuje kodowanie nazw CP852;
- Poniższy przykład jest napisany w UTF-8.

Przykład archiwizowania zawartości obecnego katalogu:
Plik index.php:
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>ZipArchiwe :: Test</title>
</head>

<body>

<?

$file = 'archiwum.zip';

$zip = new ZipArchive;

if ($zip->open($file, ZIPARCHIVE::OVERWRITE) !== true)
{
die('Nie mogę stworzyć archiwum.');
}

$dir = opendir('.');
while ($filename = readdir($dir))
{
if ($filename == '.' || $filename == '..') continue;
$utf8 = iconv('cp1250', 'utf-8', $filename);
$cp852 = iconv('cp1250', 'cp852', $filename);
?>
Dodaję plik "<?=$utf8;?>"... <?=$zip->addFile($filename, $cp852) ? 'Ok.' : 'Błąd.';?><br />
<?
}
closedir($dir); // dopisałem. :)

if (!$zip->status == ZIPARCHIVE::ER_OK)
{
echo "Błąd zapisu.";
}

$zip->close();

?>

</body>
</html>


Pozdrawiam,
MariuszMariusz Roliński edytował(a) ten post dnia 24.09.10 o godzinie 04:23

konto usunięte

Temat: ziparchive i krzaki przy polskich znakach


P.s. Pliki fizycznie na dysku maja przypadkowe nazwy md5 dopiero w locie podczas pakowania przydzielane sa im nazwy originalne.


Z tego mogę jedynie wnioskować że jeżeli posiadasz gdzieś zapisane oryginalne nazwy plików, i zmieniasz je w locie porównując z nazwą pliku, która jest sumą md5, to albo w tym pliku w którym masz zapisane nazwy ich, lub w bazie, masz kodwanie które nie zgadza się z kodowaniem w pliku, ale mogę się mylić.

Z wyrazami szacunku,
Przemysław Czekaj.



Wyślij zaproszenie do