problem z kodowaniem nazwy pliku

9

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

Elzo Valugi
źródło
Jak odbierasz i zapisujesz plik przez PHP? (Jak wygląda kod?)
Kees Cook
Analizowałem go z systemu poczty elektronicznej. Kod jest złożony :)
Elzo Valugi
Jest podobna Q & A ze skryptu, aby naprawić uszkodzony nazwach plików.
lędźwiowy

Odpowiedzi:

5

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-charsetatrybutu <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.

Eswald
źródło
7

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

sudo apt-get install nautilus-filename-repairer

Za pomocą iconvfunkcji 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.

JanC
źródło