Otrzymuję plik z nazwą farerską i próbuję zapisać go w skrypcie PHP:
2010_08_Útflutningur.xls
W Ubuntu 10.04 LTS zapisuje go jako:
2010_08_�tflutningur.xls (invalid encoding)
Zainstalowałem i uruchomiłem utf8-migration-tool
, ale bez efektu.
Czy to błąd Ubuntu, który mogę naprawić, czy po prostu muszę zrezygnować i zmodyfikować nazwę w php?
Czy istnieje dokument określający, jaki jest dopuszczalny zestaw znaków dla nazwy pliku w Ubuntu lub jakie są specyfikacje kodowania?
Dzięki
Odpowiedzi:
To wygląda na problem z kodowaniem. Niestety, PHP potrzebuje trochę trzymania za rękę, jeśli chodzi o kodowanie, ponieważ jego łańcuchy są domyślnie jednobajtowe. Jeśli tworzysz nazwę pliku w PHP,
utf8_encode()
powinno być pomocne; należy jednak pamiętać, że zakłada on kodowanie ISO-8859-1 dla danych wejściowych.Z drugiej strony, jeśli używasz nazwy pliku przesłanej przez klienta, być może możesz poprosić klienta o wykonanie dla Ciebie kodowania. Odbywa się to za pomocą
accept-charset
atrybutu<form>
znacznika i / lub poprzez ustawienie zestawu znaków strony, na której znajduje się formularz. Niektórzy klienci mogą korzystać z jednego lub drugiego, więc dla uzyskania najlepszych rezultatów użyj UTF-8 dla każdego.źródło
Domyślnie Ubuntu używa UTF-8 do nazw plików. Robi to większość współczesnych dystrybucji Linuksa i wiele innych systemów operacyjnych (Windows / NTFS jest najbardziej znanym wyjątkiem w UTF-16).
Aby naprawić pliki o nazwach w niewłaściwym kodowaniu, takim jak ten, który wyświetlasz, możesz spróbować użyć
nautilus-filename-repairer
Za pomocą
iconv
funkcji PHP można konwertować ciągi (nazwy plików) z jednego kodowania na drugie. Oczywiście wymaga to znajomości początkowego kodowania.Aby uzyskać poprawnie zakodowane nazwy plików od klienta, możesz wypróbować technikę wyjaśnioną przez eswald.
źródło