Fabian: Zeichenkodierung des Servers/Webspace

Hallo allerseits!

Ich habe das "Problem", dass wenn ich per PHP auf meinem Webspace eine Datei oder einen Ordner mit Umlauten im (Datei-)Namen erzeuge und danach mit meinem FTP Programm auf den Server gehe, zwei unterschiedliche Anzeigen bekommen.

Beispiel:
Ich erzeuge mit meinem PHP Skript (UTF-8) eine Datei namens "läöü.txt" und er wird mir im Skript (wenn ich den Inhalt des Ordners ausgebe) auch so angezeigt. Wenn ich per FTP (oder lokal) mir den Ordner anschaue, dann finde ich die Datei "läöü.txt" vor.

Jetzt habe ich schon mit utf8_decode rumgespielt, was mir aber nur das umgekehrte Ergebnis bringt (lesbare Dateinamen per FTP, aber nicht im Skript).
Jetzt könnte ich alle Abfragen und Anweisungen durch utf8_decode/_encode schicken, aber ist das dann "sicher"? Wie bekomme ich heraus unter welchem "encoding" mein Webserver läuft? Ist das einheitlich, oder läuft ein chinesischer Server dann unter einem anderen?

Vielen Dank!

Gruß
Fabian

  1. Hi!

    Ich erzeuge mit meinem PHP Skript (UTF-8) eine Datei namens "läöü.txt"

    Bist du sicher, dass das Dateisystem des Servers UTF-8-kodierte Dateinamen haben möchte?

    und er wird mir im Skript (wenn ich den Inhalt des Ordners ausgebe) auch so angezeigt.

    Das Dateisystem, angenommen es denkt, die Dateinamen wären ISO-8859-1, stört es nicht, wenn da "komische Zeichen" ankommen. Es legt sie einfach so ab. Wenn du dir diese komische Bytefolge wieder als UTF-8 interpretierst, sieht alles in Ordnung aus. Ist es aber nicht, ...

    Wenn ich per FTP (oder lokal) mir den Ordner anschaue, dann finde ich die Datei "läöü.txt" vor.

    ... wenn du dir die Sache mit einem anderen Programm ansiehst, das denkt, es bekäme ISO-8859-1

    Jetzt habe ich schon mit utf8_decode rumgespielt, was mir aber nur das umgekehrte Ergebnis bringt (lesbare Dateinamen per FTP, aber nicht im Skript).

    Wenn du es richtig einsetzt, also in Richtung Dateisystem stets ISO-8859-1 sprichst, dann scheint mir, wirst du mit diesem Server keine Probleme haben.

    Jetzt könnte ich alle Abfragen und Anweisungen durch utf8_decode/_encode schicken, aber ist das dann "sicher"?

    Sicher in welcher Hinsicht?

    Wie bekomme ich heraus unter welchem "encoding" mein Webserver läuft? Ist das einheitlich, oder läuft ein chinesischer Server dann unter einem anderen?

    Frag deinen Systemverwalter. Es gibt diverse Betriebssysteme, die alle was anderes machen können. Eine generelle Antwort darauf gibt es nicht. PHP jedenfalls kümmert sich wenig um Zeichenkodierungen, in Richtung Dateisystem ist da gleich gar nichts einstellbar.

    Lo!

    1. Hallo!

      Danke für Deine Antwort!

      Bist du sicher, dass das Dateisystem des Servers UTF-8-kodierte Dateinamen haben möchte?

      Nein, bin ich nicht. Ich dachte, dass es am erfolgversprechensten sei, da UTF8 immer als am weitest akzeptiertesten gilt

      Jetzt könnte ich alle Abfragen und Anweisungen durch utf8_decode/_encode schicken, aber ist das dann "sicher"?

      Sicher in welcher Hinsicht?

      Das es auch auf Servern mit anderen Zeichenkodierungen verwendet werden kann.

      Wie bekomme ich heraus unter welchem "encoding" mein Webserver läuft? Ist das einheitlich, oder läuft ein chinesischer Server dann unter einem anderen?

      Frag deinen Systemverwalter. Es gibt diverse Betriebssysteme, die alle was anderes machen können. Eine generelle Antwort darauf gibt es nicht. PHP jedenfalls kümmert sich wenig um Zeichenkodierungen, in Richtung Dateisystem ist da gleich gar nichts einstellbar.

      D.h. ich kann kein Skript schreiben das auch allen Servern dieser Welt mit ihren unterschiedlichen Encodings auf dem Dateisystem umgehen kann? Oder wenn doch, wie ginge das?

      Gruß
      Fabian

      1. Nein, bin ich nicht. Ich dachte, dass es am erfolgversprechensten sei, da UTF8 immer als am weitest akzeptiertesten gilt

        Das schon - aber auf Dateisystemebene ist es nicht verkehrt, einen einfachen Zeichenvorrat zu wählen. Man weiß nie auf welchem Dateisystem oder auf welchem Gerät die Daten mal gebraucht werden.

        Was passiert, wenn du ein File in einem UTF-8-kompatiblen Filesystem ablest, der Client der das File aber dan herunterläd mit dem File nichts anfangen kann, weil es sein Filesystem nicht verträgt?

        Sowas kommt häufig vor.

        Jetzt könnte ich alle Abfragen und Anweisungen durch utf8_decode/_encode schicken, aber ist das dann "sicher"?

        Sicher in welcher Hinsicht?
        Das es auch auf Servern mit anderen Zeichenkodierungen verwendet werden kann.

        Dann lass die Dateinamen eher durch eine Mapping- oder Transliterationsfunktion die sie auf einfache zeichen reduziert.

        äöu.txt wird dann zu aeoeue.txt oder aou.txt - bei doppelungen mit anderen Dateien hängst du (1) usw hinten dran.

        Oder wenn doch, wie ginge das?

        Siehe oben.