AirMax: Umlaute im XHTML

Liebe SELFHTML-ler

Ich habe ein kleines Problem. Ich kann mir vorstellen, dass dieses Thema auch schon mehrfach behandelt wurde. Falls dem so ist, wäre ich über den passenden link froh. Falls nicht: Hier das Problem:

Ich lese die Dateinamen eine Ordners in einen Array ein. Diese Dateinamen enthalten jedoch Umlaute, die bei der Ausgabe im HTML Probleme machen. Jetzt habe ich ein bisschen recherchiert und bin auf str_replace() gestossen. Ist das die Lösung für mein Problem?

Danke für eure Hilfe

Gruss,
AirMax

  1. Ich lese die Dateinamen eine Ordners in einen Array ein. Diese Dateinamen enthalten jedoch Umlaute, die bei der Ausgabe im HTML Probleme machen.

    Riecht nach Zeichenkodierung.

    Jetzt habe ich ein bisschen recherchiert und bin auf str_replace() gestossen. Ist das die Lösung für mein Problem?

    Nein, ich würde eher zur richtigen Zeichenkodierung raten

    Notfalls Konvertierungsfunktionen verwenden (iconv(), utf8_encode() bzw _decode()) oder und htmlentities(), wenn sich die Zeichen in der genutzten Kodierung nicht abbilden lassen.

    1. Hallo Suit

      Danke für Deine schnelle Antwort!

      Riecht nach Zeichenkodierung.

      Ja, das dachte ich auch. Ich wusste bloss nicht, dass ich einzelne strings auch kodieren kann. Kannte das bisher immer nur beim einlesen von externen Text-Dateien und so. utf-8encode() hört sich gut an, da die Zeichenkodierung meines XHTML-Dokumentes ebefalls UTF-8 ist. Werde es mal ausprobieren.

      Danke & Gruss
      AirMax

  2. Moin allerseits,

    Liebe SELFHTML-ler

    Ich habe ein kleines Problem. Ich kann mir vorstellen, dass dieses Thema auch schon mehrfach behandelt wurde. Falls dem so ist, wäre ich über den passenden link froh. Falls nicht: Hier das Problem:

    Bitte: Tipps für Fragende

    Ich lese die Dateinamen eine Ordners in einen Array ein. Diese Dateinamen enthalten jedoch Umlaute, die bei der Ausgabe im HTML Probleme machen.

    Welche Probleme genau? Wird nichts angezeigt? Oder gibt er dir stattdessen ein Video aus? Oder wirst du automatisch auf php umlaute umwandeln umgeleitet? SCNR
    Du solltest dein Problem genau beschreiben. Und nicht vergessen: Die meisten von uns sind in der Hellseher-Aufnahmeprüfung durchgefallen...

    Danke für eure Hilfe

    Gerne...

    Grüße, JN

    --
    ie:{ fl:( br:^ va:| ls:[ fo:| rl:? n4:? ss:| de:] js:| ch:? sh:( mo:| zu:)
    http://www.johny7.de
    1. Hallo Johny7

      Du solltest dein Problem genau beschreiben. Und nicht vergessen: Die meisten von uns sind in der Hellseher-Aufnahmeprüfung durchgefallen...

      Ja, Du hast recht. Man weiß zwar selber ganz genau, was los ist und setzt das auch bei den anderen voraus. Aber das ist nätürlich Quatsch. Also das Problem war, dass FF eine Fehlermeldung ausgab, dass mein XML nicht "wohl geformt" sei. Das betraf eben die Umlaute. Diese waren durch ein Karo mit Fragezeichen drin ersetzt. Ich habe Suits Tipp mal mit utf8_encode() ausprobiert - und siehe da: Die Umlaute wurden danach richtig dargestellt:

      Hier mal Ausschnitt aus der Schleife:
      $array[] = utf8_encode($filename);

      Danke für Eure Hilfe und Gruß
      AirMax

      1. Hallo zusammen,

        ich habe mich leider zu früh gefreut. Die Sache ist die, dass es jetzt ein weiteres Problem gibt:
        Die Idee meines Vorhabens ist es, Dateinamen aus einem Serververzeichnis in einen Array zu schreiben und anschliessend als link im HTML auszugeben. Nachdem ich nun mit $array[] = utf8_encode($filename); alle Dateinamen in $array geschrieben habe und korrekt mit Umlauten im HTML ausgebe, gelingt es mir nicht die Datei downzuloaden. Sofort kommt meine Fehlerseite: "Datei unauffindbar". Dabei stimmt der Quelltext und die Bezeichnung der Datei auf dem Server absolut überein. Ich bin ratlos.

        Kann mmir jemand von Euch einen Tipp geben? Danke

        Gruß,
        AirMax

        1. Ich bin ein bisschen aus dem PHP-Thema raus, daher weiß ich gerade nicht, welches die passende Funktion ist, aber für urls benötigst du ggf. urlencode() oder rawurlencode(). Unter Umständen musst du das durchaus auch mit anderen Zeichen-Recodierungen (wie der von die verwendeten) kombinieren.

          --
          sh:( fo:| ch:? rl:( br:& n4:& ie:{ mo:} va:) de:µ_de:] zu:) fl:( ss:| ls:[ js:(
          1. Hallo Deus Figendi,

            rawurlencode()

            DAS ist das Geheimnis. download klappt!

            Danke & Gruß
            AirMax

        2. Hi!

          Die Idee meines Vorhabens ist es, Dateinamen aus einem Serververzeichnis in einen Array zu schreiben und anschliessend als link im HTML auszugeben. Nachdem ich nun mit $array[] = utf8_encode($filename); alle Dateinamen in $array geschrieben habe und korrekt mit Umlauten im HTML ausgebe, gelingt es mir nicht die Datei downzuloaden. Sofort kommt meine Fehlerseite: "Datei unauffindbar". Dabei stimmt der Quelltext und die Bezeichnung der Datei auf dem Server absolut überein.

          Für dich sind es Zeichen, für den Rechner nur Bytes. Wenn du nun eine andere Kodierung und damit andere Bytes verwendest, ist das nicht mehr das selbe. Ein weiteres Problem besteht darin, dass die Kodierung der Dateinamen je nach System unterschiedlich sein kann und es keinen Mechanismus gibt, aus PHP abzufragen, welche Kodierung das Dateisystem verwendet. Es ist anzuraten, eine Kodierung zu verwenden, die die Bytewerte unberührt lässt. Das von Deus Figendi erwähnte (raw)urlencode() kann dir helfen. Das entschäft unter anderem alle Nicht-ASCII-Zeichen. Wenn du solch einen Wert aber über $_GET oder $_POST zurückbekommst, ist er schon wieder in seiner ursprünglichen Form.

          Nun hast du mit rawurlencode() zwar einen sicheren, aber keinen schön anzuschauenden Dateinamen. Das lässt sich auch hinbekommen, indem du als Linktext den utf8_encode()ierten und als Linkziel den rawurlencode()ierten nimmst.

          Lo!

          1. Hallo Lo!,

            Nun hast du mit rawurlencode() zwar einen sicheren, aber keinen schön anzuschauenden Dateinamen. Das lässt sich auch hinbekommen, indem du als Linktext den utf8_encode()ierten und als Linkziel den rawurlencode()ierten nimmst.

            Genau so hatte ich es schon gemacht. :-)

            Danke auch Dir (vor allem für Deine theoretischen Erklärungen)

            AirMax