Alex: Zeichensatz-Verwirrung

Hallo,

bin gerade ziemlich ratlos...

Ich habe auf einer Website eine Funktion eingebaut in der man zu einem Bestehenden Eintrag einen Kommentar schreiben kann. Der Kommentar wird per Ajax eingefügt und die Seite besteht aus einem Haufen verschiedener includes, die in ein html-Template eingebaut werden.

So weit ich das überblicken konnte sind alle Dateien im ISO-Format. Wenn ich jetzt aber so einen Kommentar speichere kommte der Text im UTF Format an. Genauer gesagt: Der Komentar wird über ajax an ein Skript geschickt und genau ab dem Zeitpunkt (anfang des Skriptes) bekomme ich nur noch Hyroglyphen bei Umlauten.

Wenn ich in dem Skript den header, der ISO... einstellt weglasse, wird der Kommentar richtig dargestellt, aber dafür sind alle anderen Umlaute schrott.

Habe es jetzt mit utf decode() gelöst. Mich würde aber trotzdem interessieren, wie sowas passieren kann.

Da es ja mit dem kommentar klappt und mit dem Rest nicht, wenn ich den ISO-header weglasse, denke ich, dass mich Dreamweaver vielleicht anlügt, wenn er mir sagt, dass alle Dateien im ISO-Format sind.
Wie kann ich denn verläßlich rausfinden in welchem Format meine Dateien sind?

Hoffe, mir kann da jemand weiterhelfen

Gruß
alex

  1. Hi,

    Da es ja mit dem kommentar klappt und mit dem Rest nicht, wenn ich den ISO-header weglasse, denke ich, dass mich Dreamweaver vielleicht anlügt, wenn er mir sagt, dass alle Dateien im ISO-Format sind.
    Wie kann ich denn verläßlich rausfinden in welchem Format meine Dateien sind?

    ich sag mal auf Dreamweaver ist genauso viel Verlass wie auf Schalke im Meisterschaftskampf =)

    Da würd ich mich davor auf die Infos vom firefox verlassen, der zeigt auf Rechtsklick->Seiteninformationen an mit welchem Zeichensatz dargestellt wird.

    grüße

    1. Hallo,

      Da würd ich mich davor auf die Infos vom firefox verlassen, der zeigt auf Rechtsklick->Seiteninformationen an mit welchem Zeichensatz dargestellt wird.

      Da steht auch ISO...

    2. echo $begrüßung;

      Da würd ich mich davor auf die Infos vom firefox verlassen, der zeigt auf Rechtsklick->Seiteninformationen an mit welchem Zeichensatz dargestellt wird.

      Da steht nur, gemäß welcher Zeichen_kodierung_ der empfangene Text interpretiert wurde. Der Zeichen_satz_ ist immer Unicode.

      Die Darstellung ist unabhängig von der Zeichen_kodierung_, denn über nummerische Zeichenreferenzen oder Entitys kann man deutlich mehr Zeichen in einen Text bringen als die Kodierung erlaubt, wenn es eine ist, die nicht auf Unicode basiert.

      echo "$verabschiedung $name";

      1. Da steht nur, gemäß welcher Zeichen_kodierung_ der empfangene Text interpretiert wurde. Der Zeichen_satz_ ist immer Unicode.

        Die Darstellung ist unabhängig von der Zeichen_kodierung_, denn über nummerische Zeichenreferenzen oder Entitys kann man deutlich mehr Zeichen in einen Text bringen als die Kodierung erlaubt, wenn es eine ist, die nicht auf Unicode basiert.

        Danke für die Aufklärung, war mir bis dato nicht klar. Öfter mal was Neues :)

        Grüße

        1. @@miku:

          Danke für die Aufklärung, war mir bis dato nicht klar. Öfter mal was Neues :)

          Nochmal zum Nachlesen:
          Zeichencodierung für Anfänger
          Dokument-Zeichensatz
          Verwendung von Zeichen-Entity-Referenzen und numerischen Zeichenreferenzen

          Live long and prosper,
          Gunnar

          --
          Das einzige Mittel, den Irrtum zu vermeiden, ist die Unwissenheit. (Jean-Jacques Rousseau)
          1. Nochmal zum Nachlesen:
            Zeichencodierung für Anfänger

            Sehr guter Link, vor allem der Teil "Was also ist eine Zeichencodierung?" macht den Unterschied zwischen Zeichensatz und Zeichencodierung sehr schnell und einfach klar.

            Grüße und schönes Wochenende =)

  2. echo $begrüßung;

    So weit ich das überblicken konnte sind alle Dateien im ISO-Format. Wenn ich jetzt aber so einen Kommentar speichere kommte der Text im UTF Format an. Genauer gesagt: Der Komentar wird über ajax an ein Skript geschickt und genau ab dem Zeitpunkt (anfang des Skriptes) bekomme ich nur noch Hyroglyphen bei Umlauten.

    Nein, denn wie du richtig sagt, sind es UTF-8-kodierte Zeichen.

    Habe es jetzt mit utf decode() gelöst. Mich würde aber trotzdem interessieren, wie sowas passieren kann.

    AJAX verwendet immer UTF-8 beim Senden an den Server.

    Wie kann ich denn verläßlich rausfinden in welchem Format meine Dateien sind?

    Verlässlich? Theoretisch: gar nicht. Das ist prinzipbedingt nicht möglich. Praktisch: mit mehr oder weniger großen Fehlerquote. Du kannst durch Ausschlussverfahren feststellen, dass es eine bestimmte Kodierung nicht sein kann, weil deren Regeln nicht eingehalten werden. Dann bleiben aber immer noch jede Menge Kodierungen übrig, die es sein können. Um festzustellen, ob eine bestimmte Kodierung vorliegt, musst du den Text gemäß dieser Kodierung interpretieren und schauen, ob das Interpretationsergebnis sinnvoll ist. Dazu braucht es einiges an Intelligenz. Wenn du dich auf einige wenige mögliche Kodierungen beschränkst, kannst du teilweise einfach zum Ziel kommen. Beispielsweise: Wenn ein Text den Regeln von UTF-8 entspricht, wird es UTF-8 sein. Wenn nicht, ist es ISO-8859-1 (oder Windows-1252), wenn alle andere Zeichenkodierungen ausgeschlossen bleiben. Ich schrieb bewusst "wird sein" und nicht "ist", denn mein Lieblingsbeispiel zeigt, dass dem nicht so sein muss.

    Wenn du vollständig auf UTF-8 umstellst, hast du die wenigsten Probleme. Wenn du mit eingeschränkten Zeichensätzen wie denen der ISO-8859-Familie arbeitest, hast du immer ein Verlustrisiko. Ein Browser arbeitet mit Unicode. Wenn er ISO-... schicken soll, muss er das umkodieren und muss bei den nicht enthaltenen Zeichen was anderes machen. Einige verfälschen das zu Nummerischen Zeichenreferenzen, andere lassen das Zeichen untern Tisch fallen.

    echo "$verabschiedung $name";

    1. Hallo,

      danke für die Aufklärung :)

      Dann werde ich das wohl erstmal per PHP weiter decoden, bis ich mal alles auf UTF umschalte.

      Gruß
      alex

    2. echo $begrüßung;

      AJAX verwendet immer UTF-8 beim Senden an den Server.

      Nein. Die Kodierung der Zeichen im AJAX-Request entspricht der Einstellung im Browser und die kann auch eine Andere sein. Das habe ich heute gelernt.

      Hotte

      --
      Wenn der Kommentar nicht zum Code passt, kann auch der Code falsch sein.
      1. echo $begrüßung;

        » AJAX verwendet immer UTF-8 beim Senden an den Server.
        Nein. Die Kodierung der Zeichen im AJAX-Request entspricht der Einstellung im Browser und die kann auch eine Andere sein. Das habe ich heute gelernt.

        Welche Einstellung konkret meinst du und welchen Browser?

        echo "$verabschiedung $name";