PeterPaule: Hilfe: Jeder Browser nutzt andere Zeichenkodierung bei Umlauten

Hallo,
ich brüte schon seit Tagen an einem Problem, dass mir bisher nie begegnet ist:

Ich habe eine Website erstellt, die ein Drop-Down-Menü und zwei Inline-Frames (für Menü und Content) hat. Beim Klick auf einen Menüpunkt werden per Javascript beide Frames gleichzeitig aktualisiert. Jede  Seite enthält dien Tags
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> und
<meta http-equiv="Content-Type" content="text/html; charset=ISO 8859-1">

Funktioniert einwandfrei, bis auf die deutschen Umlaute!!!

  • Opera zeigt alles korrekt an

  • bei Firefox funktioniert die automatische Erkennung nicht. Wähle ich aktiv die ISO 8859-1-Zeichenkodierung aus, zeigt er nur manche Seiten korrekt an und manche fehlerhaft. Wähle ich UTF-8, dann werden die zuvor fehlerhaften korrekt angezeigt und die zuvor korrekt fehlerhaft angezeigt.

  • und Maxthon (alias IE) hat gar was sonderbares: im Dropdown-Menü kann man auf den obersten Menüpunkt klicken, der erste Untermenü-Punkt verweist auf denselben Content, doch beim Hauptmenü-Punkt zeigt er die Umlaute nicht korrekt an - beim Untermenüpunkt dagegen korrekt.

Ihr könnt Euch hier die Seite anschauen und mit unterschiedlichen Browsern testen:
http://www.biotherik.de/profin

Ich weiß absolut keinen Rat und hoffe auf Eure konstruktive Hilfe

PeterPaule

  1. <meta http-equiv="Content-Type" content="text/html; charset=ISO 8859-1">

    http://www.biotherik.de/profin/

    web-sniffer meint „Content-Type: text/html (BOM UTF-8)“.

    Roland

    --
    Top Fives // »Schlechte Werbung. Gibt es nicht.« // mitmachen
    1. Hi,

      web-sniffer meint „Content-Type: text/html (BOM UTF-8)“.
      und Firefox hält sich an die meta http-equiv-Angabe, während Opera mal wieder den IE nachäfft und  sich fälschlich am Inhalt orientiert... naja, immerhin nur quirks mode - bei vollständigem DOCTYPE würde er sich vielleicht auch an den Standatrd halten.

      freundliche Grüße
      Ingo

      1. Hi,

        hab ich das so korrekt geschrieben
        <meta http-equiv="Content-Type" content="text/html; charset=BOM UTF-8">
        oder muss ich BOM UTF-8 in Klammern schreiben?

    2. die Änderung hat nichts geholfen...

    3. Moin!

      web-sniffer meint „Content-Type: text/html (BOM UTF-8)“.

      Und da meint er falsch. Vom Server verwendet wird nämlich nur "Content-Type: text/html"

      Siehe http://www.schroepl.net/cgi-bin/http_trace.pl?url=http%3A%2F%2Fwww.biotherik.de%2Fprofin%2F&method=HEAD&version=HTTP%2F1.0

      - Sven Rautenberg

      --
      "Love your nation - respect the others."
  2. echo $begrüßung;

    [Zeichenkodierungschaos]
    Ich weiß absolut keinen Rat und hoffe auf Eure konstruktive Hilfe

    Beseitige das Kuddelmuddel. Der Webserver liefert den Content-Type-HTTP-Header ohne charset-Angabe aus. Die hätte sonst Vorrang. Du gibts in den HTML-Meta-Daten an, die Kodierung sei ISO-8859-1. Stattdessen ist sie aber UTF-8 und mit BOM am Anfang[*]. Diese BOM werden wohl einige Browser für ernster nehmen als deine Meta-Angabe. Einige dich auf eine Kodierung und gib diese auch korrekt an. Mit ISO-8859-1 stehen dir die meisten westlichen Zeichen zur Verfügung, mit UTF-8 praktisch unbegrenzt alle Zeichen.

    [*] Du siehst sie ganz am Anfang, wenn du im Firefox die Quelltextansicht öffnest und dort zu Fuß ISO-8859-1 einstellst.

    echo "$verabschiedung $name";

    1. echo $begrüßung;

      [BOM]

      Nachtrag: Die BOM wird bei UTF-8 nicht benötigt. Sie sorgt außerdem dafür, dass der IE in den Quirksmode schaltet. Speichere die Dateien als UTF-8 ohne BOM. Das muss im Editor zu konfigurieren oder auszuwählen sein.

      echo "$verabschiedung $name";

      1. Moment, es reicht also nicht in den HTML-Code den meta-Tag einzutragen, sondern ich muss die Datei in einem bestimmmten Format speichern?
        Hmm, wie mache ich das denn? Kann sein, dass ich in Ultraedit etwas falsches eingestellt habe, da ich früher keine Probleme hatte, aber ich hab keine Ahnung wie ich das ändern soll...

        echo $begrüßung;

        [BOM]

        Nachtrag: Die BOM wird bei UTF-8 nicht benötigt. Sie sorgt außerdem dafür, dass der IE in den Quirksmode schaltet. Speichere die Dateien als UTF-8 ohne BOM. Das muss im Editor zu konfigurieren oder auszuwählen sein.

        echo "$verabschiedung $name";

        1. Also, jetzt habe ich das Problem, dass mir Ultraedit im Quelltext alle Umlaute als leere Kästchen anzeigt...

          Moment, es reicht also nicht in den HTML-Code den meta-Tag einzutragen, sondern ich muss die Datei in einem bestimmmten Format speichern?
          Hmm, wie mache ich das denn? Kann sein, dass ich in Ultraedit etwas falsches eingestellt habe, da ich früher keine Probleme hatte, aber ich hab keine Ahnung wie ich das ändern soll...

          .

          1. Das klingt so, als haettest Du als UTF 8 gespeichert aber er nutzt es nicht zum lesen. Was hast Du veraendert?

            Leider kenn ich mich nicht mit Ultraedit aus.

        2. Nun,

          sogar Windows' Notepad laesst dich beim Speichern den Zeichencode einstellen. Ultraedit nutze ich nicht. Aber es hat sicher eine Hilfe wo du das finden kannst. Spntan wuerde ich sagen im Speicherfenster, wie Notepad oder unter 'Optionen/Einstellungen'

          Wenn Du es gar nicht hinbekommst: Notepad nutzen, save as auswaehlen und als UTF 8 speichern.

          1. Super, davon hatte ich gar keine Ahnung, dass eine Textdatei verschiedene Kodierung haben kann. Ich war davon ausgegangen, dass es Reintext ist, dass der Browser durh die meta-Angabe dann unterschiedlich ausgibt.
            Jedenfalls habe ich alle htm-Dateien in UTF-8 gewandelt und jetzt werden die Umlaute in allen Browsern korrekt angezeigt.

            Vielen vielen Dank für Eure Schnelle Hilfe.

            Eine Frage habe ich noch: Ist es egal, welche Kodierung ich wähle, oderist UTF-8 besser als ISO-8859-1?
            Wie kann ich denn die System-default auf UTF-8 wechseln. Wäre ja lästig,wenn ich jede neue Datei aktiv umkodieren müßte. Wie gesagt, bis vor ein paar Tagen hatte ich noch nie solche Probleme bemerkt - dabei beschäftlige ich mich ja schon paar Jahre laienhaft mit Webdesign.

            Danke Leute

            Nun,

            sogar Windows' Notepad laesst dich beim Speichern den Zeichencode einstellen. Ultraedit nutze ich nicht. Aber es hat sicher eine Hilfe wo du das finden kannst. Spntan wuerde ich sagen im Speicherfenster, wie Notepad oder unter 'Optionen/Einstellungen'

            Wenn Du es gar nicht hinbekommst: Notepad nutzen, save as auswaehlen und als UTF 8 speichern.

            1. Hi!

              Eine Frage habe ich noch: Ist es egal, welche Kodierung ich wähle, oderist UTF-8 besser als ISO-8859-1?

              Es ist im Grunde egal. Aber UTF-8 hat natuerlich Vorteile. Damit lassen sich alle Zeichen ausserhalb des ASCII Bereichs definieren. Und damit meine ich alle. (so gut wie) Mit UTF-8 kannst Du nicht nur einfach Umlaute in dein HTML schreiben (die werden dann auch ohne Kodierung korrekt angezeigt) sondern auch beliebige Schriftzeichen. Polnisch, Japanisch... Wenn die installiert sind kannst Du ohne Probleme losschreiben und der Client zeigt sie an. Jedenfall in der Theorie. UFT verbraucht zwar mehr Speicher, aber dafuer kannst Du ne Menge darstellen.

              Wie kann ich denn die System-default auf UTF-8 wechseln. Wäre ja lästig,wenn ich jede neue Datei aktiv umkodieren müßte. Wie gesagt, bis vor ein paar Tagen hatte ich noch nie solche Probleme bemerkt - dabei beschäftlige ich mich ja schon paar Jahre laienhaft mit Webdesign.

              Wie meinst Du das? In deinem Editor? Den Browser?

            2. echo $begrüßung;

              Super, davon hatte ich gar keine Ahnung, dass eine Textdatei verschiedene Kodierung haben kann. Ich war davon ausgegangen, dass es Reintext ist, dass der Browser durh die meta-Angabe dann unterschiedlich ausgibt.

              Es gibt im Computer keinen "Reintext". Jedes Zeichen wird durch eine Zahl repräsentiert. Es gibt mehrere Systeme, ein bestimmtes Zeichen durch eine bestimmte Zahl zu repräsentieren. Einige Kodierungen verwenden je ein Byte pro Zeichen, womit 256 Zahlen zur Verfügung stehen bzw. 256 Zeichen repräsentierbar sind. Andere Kodierungen verwenden pro Zeichen eine festgelegte Zahl Bytes, wieder andere verwenden unterschiedlich viele Bytes.

              Literaturtipp: SELFHTML-Kapitel Internationalisierung und jener Beitrag, der dir bei den Begrifflichkeiten weiterhelfen kann.

              echo "$verabschiedung $name";

        3. echo $begrüßung;

          Moment, es reicht also nicht in den HTML-Code den meta-Tag einzutragen, sondern ich muss die Datei in einem bestimmmten Format speichern?

          Natürlich reicht es nicht, einem Text der Sprache X den Namen der Sprache Y voranzustellen, um ihn zu übersetzen. Oder anders: Steck mal in einen Briefumschlag 10 Euro und schreib außen drauf 100 Euro.

          Hmm, wie mache ich das denn? Kann sein, dass ich in Ultraedit etwas falsches eingestellt habe, da ich früher keine Probleme hatte, aber ich hab keine Ahnung wie ich das ändern soll...

          Der Konfigurationsdialog ist zwar recht umfangreich. Alle (zumindest die meisten) Einstellungen haben aber einen Hilfetext. Außerdem gibt es im Datei-Menü noch Möglichkeiten zum Umkodieren. Ich hab grad kein Windows zur Hand, deswegen kann ich es dir nicht genauer sagen. Du müsstest nach der BOM oder Byte-Order-Mark(ierung) suchen, und wie man sie deaktiviert, wenn du bei UTF-8 bleiben willst. Auf alle Fälle solltest du die Texte mit einer definierten Kodierung speichern. Die Statuszeile hält ebenfalls noch einige Information bereit. U8 steht beispielsweise für UTF-8. ISO-8859-1 bzw. Windows-1252, was wohl deine Systemdefault-Einstellung sein wird, müsste der UE als ANSI oder ASCII bezeichnet haben.

          Um die Kodierung einer Datei zu prüfen, eignet sich als einfaches Mittel, die Datei im Browser zu öffnen (Datei->Öffnen) und unter Ansicht->(Zeichen-)Kodierung eine Kodierung auszuwählen. Werden alle Zeichen richtig dargestellt kann man im Allgemeinen davon ausgehen, dass die gewählte Kodierung vorliegt.

          echo "$verabschiedung $name";

        4. Hi,

          Moment, es reicht also nicht in den HTML-Code den meta-Tag einzutragen, sondern ich muss die Datei in einem bestimmmten Format speichern?

          Du Scherzkeks!
          Denk mal nach - verstehst du einen Chinesen, der nach wie vor in seiner Muttersprache brabbelt, allein deswegen ploetzlich besser, weil er sich ein T-Shirt ueberzieht, wo "ich sprechen deutsch" draufsteht ...?

          MfG ChrisB

    2. also, wennich nur UTF-8 eingebe, dann wird überhaupt kein Umlaut erkannt!
      Hab es gerade getestet.

    3. Hi,

      [*] Du siehst sie ganz am Anfang, wenn du im Firefox die Quelltextansicht öffnest und dort zu Fuß ISO-8859-1 einstellst.

      wieso zu Fuß? Mein Firefox 1.0.8 beachtet die meta-Angabe wie gesagt. Ist der 2er inzwischen schlechter geworden?

      freundliche Grüße
      Ingo