Minota: Umlaute in erzeugten iCalendar Dateien

Hallo,

ich habe ein PHP-Skript geschrieben, welches auf Basis von Daten aus einer MySQL Datenbank iCalendar (ics) Dateien erzeugt. Es bietet die Möglichkeit einzelne Termine zu exportieren, die mit

header("Content-Disposition: attachment;filename=veranstaltungstermin_".$date.".ics");

an den Nutzer "geschickt" werden. Der gesamte Kalender lässt sich durch Aufruf einer über rewrite Regeln erzeugten URL mit veranstaltungskalender.ics aufrufen.

Soweit so gut, gäbe es nicht diese Probleme mit den Umlauten.
Die php-Datei liefert

header("Content-Type: text/calendar; charset=UTF-8");

mit. Im Quellcode der erzeugten Dateien sind die Umlaute auch zu sehen. Lade ich die Datei jedoch in Outlook 2003 oder 2007, so fehlen die Umlaute komplett. Gleiches, wenn ich die Datei in Webdienste wie z.B. pageflakes.com einbinde. Googe Calendar wiederum zeigt die Umlaute!?

Sehe ich mir iCalendar Dateien von Dritten an, so kann ich keine Unterschiede erkennen. Umlaute sind im Quellcode als solche zu sehen. Lade ich aber diese Dateien in angesprochene Programme funktioniert alles einwandfrei.

Ich habe auch schon keinen header mit geschickt und andere charsets probiert, ohne Erfolg. Auf dem Server läuft PHP 4.3.2. Kann dies eventuell Auswirkungen haben?

Ich komme einfach nicht weiter und bedanke mich vorab schon einmal für jede Hilfe und Idee.

  1. echo $begrüßung;

    Die php-Datei liefert
    header("Content-Type: text/calendar; charset=UTF-8");
    mit. Im Quellcode der erzeugten Dateien sind die Umlaute auch zu sehen.

    Das anzeigende Programm interpretiert die Daten auch als UTF-8? Wenn es sie als ISO-8859-1 oder Win-1252 interpretiert, wäre eine richtige Anzeige der Umlaute falsch.

    Auf dem Server läuft PHP 4.3.2. Kann dies eventuell Auswirkungen haben?

    Wenn du nicht ausdrücklich irgendwas an der Kodierung der Daten änderst, haben durchreichende Programme keine Auswirkung.

    Ich komme einfach nicht weiter und bedanke mich vorab schon einmal für jede Hilfe und Idee.

    Du musst dir immer darüber im Klaren sein, mit welcher Kodierung das jeweilige Programm die ankommenden Daten interpretiert, um Aussagen über die Richtigkeit des Ergebnisses treffen zu können.

    echo "$verabschiedung $name";

    1. UTF-8 steht als empfohlener Zeichensatz in den iCal Spezifikationen.
      Da z.B. Outlook ics-Dateien lesen kann, muss es doch auch mit dem Inhalt in UTF-8 umgehen können!?

      Hinzu kommt, dass ich es ja auch schon mit verschiedenen Zeichensätzen versucht habe, ohne Erfolg.

      1. echo $begrüßung;

        UTF-8 steht als empfohlener Zeichensatz in den iCal Spezifikationen.
        Da z.B. Outlook ics-Dateien lesen kann, muss es doch auch mit dem Inhalt in UTF-8 umgehen können!?

        Du schriebst, dass du dir Quelltext angesehen hast. Womit hast du das getan? War das was in iCal eingebautes oder vielleicht ein externes Programm?

        Hinzu kommt, dass ich es ja auch schon mit verschiedenen Zeichensätzen versucht habe, ohne Erfolg.

        Im Zweifelsfall musst du dir die beteiligten Bytes einzeln ansehen, um zu entscheiden ob das was du angezeigt bekommst auch die richtigen Byte-Werte verwendet.

        echo "$verabschiedung $name";

        1. Du schriebst, dass du dir Quelltext angesehen hast. Womit hast du das getan?»»

          Ich habe die iCal Dateien auf meinem Desktop gespeichert und mit TextPad angeschaut.

          Im Zweifelsfall musst du dir die beteiligten Bytes einzeln ansehen, um zu entscheiden ob das was du angezeigt bekommst auch die richtigen Byte-Werte verwendet.

          Wie mache ich das?

          1. echo $begrüßung;

            Du schriebst, dass du dir Quelltext angesehen hast. Womit hast du das getan?
            Ich habe die iCal Dateien auf meinem Desktop gespeichert und mit TextPad angeschaut.

            So hab ich mir das gedacht. Hast du beim Öffnen der Datei angegeben, dass die Datei UTF-8-kodiert ist? (Vielleicht muss man das auch anders(wo) machen, ich kenne TextPad nicht.)

            Im Zweifelsfall musst du dir die beteiligten Bytes einzeln ansehen, um zu entscheiden ob das was du angezeigt bekommst auch die richtigen Byte-Werte verwendet.
            Wie mache ich das?

            Nimm dir einen Hexeditor (unter Windows z.B. bietet Ultraedit eine Hex-Ansicht) sowie eine Kodiertabelle und vergleiche Dateiinhalt mit dem Soll.

            echo "$verabschiedung $name";

            1. Ich glaube ich habe die Lösung meines Problems gefunden. :)
              Die TextPad Software zeigt unter Eigenschaften den Zeichensatz der Datei an.

              Die Kalenderdateien deren Sonderzeichen korrekt dargestellt werden weisen dort UTF-8 aus. Erstelle und exportiere ich mit Outlook eine ics-Datei, so ist diese auch UTF-8 kodiert.

              Die von meinem Skript erzeugten ics-Dateien haben dagegen unter Zeichensetz ANSI stehen.

              Nun habe ich einfach alle Texte die ausgegeben werden sollen durch die PHP-Funktion string utf8_encode(string $data) gejagt und siehe da, alle Sonderzeichen usw. werden wie gewünscht dargestellt.

              Ich hoffe ich kann dies damit abschließen und danke dir vielmals für deine Hilfe, die mich auf den richtigen Weg geführt hat ;)