Używam klasy php ZipArchive do generowania archiwum zip. Używam drugiego parametru metody addFile w celu ustawienia nazwy pliku w archiwum (ponieważ prawdziwy plik na dysku ma inną nazwę). Niektóre nazwy muszą zawierać francuskie akcenty (takie jak & eacute;). Po pobraniu archiwum akcenty nie są poprawnie wyświetlane w nazwie pliku. Jakiego kodowania powinienem używać dla nazw plików? (aplikacja używa UTF-8)Jakie kodowanie wykorzystuje ZipArchive do przechowywania nazw plików w utworzonym archiwum?
Odpowiedz
Pliki zip nie mają określonego kodowania; narzędzie archiwum musi odgadnąć (lub założyć) używane kodowanie. Najpierw spróbuj CP1252, a następnie stamtąd.
Nie działa. Próbowałem już bez powodzenia modeli ISO-8859-1, CP1252 i CP850 – matei
Jak wygląda sekwencja bajtów pliku i co ma być w tekście? –
Użyj kodowania DOS. Moje nazwy plików mają znaki cyrylicy, więc koduję nazwy plików od cp1251
(Windows) do cp866
(DOS), po podaniu nazwy pliku do $zip->addFile()
.
Wielkie dzięki! Jak dokładnie wymyśliłeś jakie kodowania użyć? – YakovL
To jest php błąd # 53948, patrz official bug report.
Sugerowane obejście (pracował dla mnie):
$zip->addFile($file, iconv("UTF-8", "CP852", $local_name));
Zip to dość stary format, a poprzedza Unicode. Starsze wersje tego formatu z przed 2007 r. Najprawdopodobniej używają standardowego rozszerzonego ascii. Po '07 nowa specyfikacja dopuszczała kodowanie UTF-8. Sprawdź, która wersja pliku generujesz. –