Norbert: Zeichenkonvertierung

Hallo,
es wird eine Seite an den Browser gesendet, die normalen Text enthaelt.
Im Header steht dazu ausdruecklich:
<meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

Trotzdem wandelt der Browser(IE6/SP2) Umlaute und Sonderzeichen in Zweibyte-Zeichen um und zeigt sie auch so an, also aus "Stadtporträt" wird "Stadtporträt" und aus "Économie" wird "Économie".

Wo steckt hier der Wurm drin ...

Gruss und Dank
Norbert

  1. Hell-O!

    Im Header steht dazu ausdruecklich:
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

    Das ist der Dokumentenkopf des HTML-Dokuments. Aber was kommt tatsächlich beim Browser an? Servereinstellungen könnten hier zu einem anderen Ergebnis führen. Poste bitte mal einen Link.

    Trotzdem wandelt der Browser(IE6/SP2) Umlaute und Sonderzeichen in Zweibyte-Zeichen um

    Nur der IE?

    Siechfred

    --
    Hier könnte Ihre Werbung stehen.
    Schöne Wörter, Teil 2 || Die neue 1%-Regelung
    1. Hai,

      Poste bitte mal einen Link.

      gerne
      read.qstr.php, aber ich fuerchte, das hilft Dir nicht, ist unser LAN ... ;-)

      Trotzdem wandelt der Browser(IE6/SP2) Umlaute und Sonderzeichen in Zweibyte-Zeichen um
      Nur der IE?

      nein, der FireFox macht es auch, aber den verwende ich nie!
      (Im Konzern sind nur M$-Produkte zugelassen, aber ich habe Narrenfreiheit.)

      Unter Zeichencodierung steht auch ordentlich "Westlich (ISO 8859-1)".
      Also kommt die Server-Info bei ihm an.
      Warum macht er es dann nicht ...

      Noch komischer:
      Habe den  HTML-Output des PHP-Scriptes online gelegt,

      • der FireFox behaelt "Westlich (ISO 8859-1)" bei und spinnt unveraendert.
      • der IE6 aendert die Codierung in UTF-8 und zeigt es ordentlich an.
        Da kriegt man echt die Kriese ... :-((

      Gruss und Dank
      Norbert

      1. Habe den  HTML-Output des PHP-Scriptes online gelegt

        Laut Michael Schröpls HTTP_trace wird überhaupt keine Zeichenkodierung ausgeliefert. Also begibst du dich in die Hände des Browsers, der dann irgendwas draus machen soll. Du solltest via PHP explizit UTF-8 ausliefern *und* die Meataangabe zum Zeichensatz auf "UTF-8" stellen, denn so ist dein Dokument codiert.

        • der FireFox behaelt "Westlich (ISO 8859-1)" bei und spinnt unveraendert.

        Gehe auf "Ansicht -> Zeichenkodierung -> Unicode (UTF-8)", und alles wird korrekt angezeigt. Ansonsten ist das Verhalten des FF völlig korrekt. Er bekommt keine Zeichensatzangabe via HTTP-Header und orientiert sich deshalb an der Metaangabe, die ISO 8859-1 angibt. Ändere dies so, wie ich es oben schrieb.

        • der IE6 aendert die Codierung in UTF-8 und zeigt es ordentlich an.

        Er errät es anhand des Inhaltes und ignoriert die Metaangabe. Dieses Verhalten mag man werten, wie man will :-)

        Siechfred

        --
        Hier könnte Ihre Werbung stehen.
        Schöne Wörter, Teil 2 || Die neue 1%-Regelung
        1. Hai Siechfred,

          Deine Vermutung stimmte, irgend jemand hat in die zu verarbeitenden Daten einige UTF8-Zeichen eingeschmuggelt und die haben das Chaos ausgeloest. Jetzt decodiere ich alles profilaktisch nach ISO und die Welt ist wieder heile.

          In diesem Sinne frohes WE ...

          PS:
          Default sendet PHP diesen Header mit:
          Content-Type: text/html; charset:ISO-8859-1
          zusaetzlich steht in dem Dateikopf eine analoge META-Angabe.

          Gruss und Dank
          Norbert

  2. echo $begrüßung;

    es wird eine Seite an den Browser gesendet, die normalen Text enthaelt.
    Im Header steht dazu ausdruecklich:
    <meta http-equiv="Content-Type" content="text/html; charset=ISO-8859-1">

    Trotzdem wandelt der Browser(IE6/SP2) Umlaute und Sonderzeichen in Zweibyte-Zeichen um und zeigt sie auch so an, also aus "Stadtporträt" wird "Stadtporträt" und aus "Économie" wird "Économie".

    Der Browser wandelt nichts um. Er nimmt die Zeichensatz-Angabe aus dem HTTP-Header, und nur wenn dort keine enthalten ist, die aus dem von dir zitierten Meta-Element, und interpretiert das Dokument gemäß dieser Zeichensatzangabe. Wenn das Dokument nicht gemäß dieser Angabe kodiert ist, fehlinterpretiert er es, was zu Datenmüll führt.

    Du hast vermutlich das Dokument UTF-8-kodiert gespeichert und sagst dem Browser es sei ISO-8859-1. Das Resultat sieht dann so aus wie von dir beschrieben.

    echo "$verabschiedung $name";

    1. Du hast vermutlich das Dokument UTF-8-kodiert gespeichert
      und sagst dem Browser es sei ISO-8859-1.

      hmm,
      eigentlich bin ich heute noch nuechtern ...

      Speichern tut hier niemand etwas, es ist der Output eines PHP-Scriptes.
      Und bevor ich freiwillig UTF-8 verwende, werfe ich den PC aus dem Fenster ... ;-)

      Schoenes WE
      Norbert

      1. echo $begrüßung;

        Du hast vermutlich das Dokument UTF-8-kodiert gespeichert
        und sagst dem Browser es sei ISO-8859-1.
        hmm,
        eigentlich bin ich heute noch nuechtern ...

        Aber uneigentlich nicht? :-)
        Die von dir angegebene Seite beginnt mit der Zeichenfolge . Das ist die UTF-8-BOM. Sie wird von Editoren wie dem Notepad ungefragt eingefügt, wenn der Text UTF-8-kodiert gespeichert wird, was hier der Fall ist.

        echo "$verabschiedung $name";

        1. Die von dir angegebene Seite beginnt mit der Zeichenfolge .

          stimmte, leider ...
          Aber die Ursache ist schon lange beseitigt - siehe unten.

          Gruss Norbert

      2. Hallo Norbert.

        Und bevor ich freiwillig UTF-8 verwende, werfe ich den PC aus dem Fenster ... ;-)

        Warum?
        UTF-8 ist ungemein praktisch und auf lange Sicht sowieso geeigneter als die ISO-*-Kodierungen.

        Einen schönen Freitag noch.

        Gruß, Ashura

        --
        sh:( fo:} ch:? rl:( br: n4:~ ie:{ mo:| va:) de:> zu:} fl:( ss:) ls:[ js:|
        „It is required that HTML be a common language between all platforms. This implies no device-specific markup, or anything which requires control over fonts or colors, for example. This is in keeping with the SGML ideal.“
        [HTML Design Constraints: Logical Markup]