Problem mit der Dateinamencodierung

9

Ich erhalte eine Datei mit einem färöischen Namen und versuche, sie in einem PHP-Skript zu speichern:

2010_08_Útflutningur.xls

In Ubuntu 10.04 speichert LTS es als:

2010_08_�tflutningur.xls (invalid encoding)

Ich habe installiert und ausgeführt utf8-migration-tool, aber ohne Wirkung.

Ist dies ein Ubuntu-Fehler, den ich beheben kann, oder muss ich einfach aufgeben und den Namen in PHP ändern?

Gibt es ein Dokument, in dem angegeben ist, welcher Zeichensatz für einen Dateinamen in Ubuntu akzeptabel ist oder welche Codierungsspezifikationen gelten?

Vielen Dank

Elzo Valugi
quelle
Wie empfangen und speichern Sie die Datei über PHP? (Wie sieht der Code aus?)
Kees Cook
Ich habe es aus einem E-Mail-System analysiert. Der Code ist komplex :)
Elzo Valugi
Es gibt ähnliche Fragen und Antworten mit einem Skript zum Reparieren fehlerhafter Dateinamen.
Lumbric

Antworten:

5

Dies scheint ein Codierungsproblem zu sein. Leider muss PHP bei der Codierung ein wenig in der Hand gehalten werden, da die Zeichenfolgen standardmäßig Einzelbyte sind. Wenn Sie den Dateinamen in PHP erstellen, utf8_encode()sollte dies hilfreich sein. Beachten Sie jedoch, dass für die Eingabe eine ISO-8859-1-Codierung vorausgesetzt wird.

Wenn Sie jedoch den von einem Client übermittelten Dateinamen verwenden, können Sie den Client möglicherweise auffordern, die Codierung für Sie vorzunehmen. Dies erfolgt mit dem accept-charsetAttribut des <form>Tags und / oder durch Festlegen des Zeichensatzes der Seite, auf der sich das Formular befindet. Bestimmte Clients verwenden möglicherweise den einen oder anderen. Verwenden Sie daher für optimale Clients jeweils UTF-8.

eswald
quelle
7

Standardmäßig verwendet Ubuntu UTF-8 für Dateinamen. Die meisten modernen Linux-Distributionen und viele andere Betriebssysteme tun dies (Windows / NTFS ist die bekannteste Ausnahme mit UTF-16).

Sie können versuchen, Dateien zu reparieren, deren Namen in der falschen Codierung wie der von Ihnen angezeigten vorliegen nautilus-filename-repairer

sudo apt-get install nautilus-filename-repairer

Mit den PHP- iconvFunktionen können Sie Zeichenfolgen (Dateinamen) von einer Codierung in die andere konvertieren. Dazu müssen Sie natürlich zunächst wissen, in welcher Codierung sie sich befinden.

Um korrekt codierte Dateinamen vom Client zu erhalten, können Sie die von eswald erläuterte Technik ausprobieren.

JanC
quelle