stoffel43: UFT-8 ohne BOM kein UTF-8

Hallo,
wenn ich eine Datei als UTF-8 ohne BOM abspeichere und über den Webserver im Browser aufrufe dann steht die Codierung nicht auf UTF-8 und Sonderzeichen werden falsch ausgegeben. Wenn ich die Datei als "normales" UTF-8 abspeicher, dann klappt alles.

Auch ein zusätzliches <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> bringt da nichts.

Ich muss die Dateien als UTF-8 ohne BOM abspeichern, da es sonst z.B. nicht mit Sessions klappt ("headers already sent ").

Mache ich da was falsch?

Stoffel

  1. Hallo,

    wenn ich eine Datei als UTF-8 ohne BOM abspeichere und über den Webserver im Browser aufrufe dann steht die Codierung nicht auf UTF-8 und Sonderzeichen werden falsch ausgegeben. Wenn ich die Datei als "normales" UTF-8 abspeicher, dann klappt alles.

    Auch ein zusätzliches <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> bringt da nichts.

    Ich muss die Dateien als UTF-8 ohne BOM abspeichern, da es sonst z.B. nicht mit Sessions klappt ("headers already sent ").

    sende mal mit PHP folgenden HTTP Header
    header('Content-Type: text/html; charset=utf-8');

    mfg
    Twilo

  2. wenn ich eine Datei als UTF-8 ohne BOM abspeichere und über den Webserver im Browser aufrufe dann steht die Codierung nicht auf UTF-8 und Sonderzeichen werden falsch ausgegeben. Wenn ich die Datei als "normales" UTF-8 abspeicher, dann klappt alles.

    Auch ein zusätzliches <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> bringt da nichts.

    Vermutlich schickt der Server seinerseits die Content-Type-Zeile schon im HTTP-Kopf, aber mit einer anderen Kodierung; in diesem Durcheinander gewinnt dann diese vor der <meta>-Zeile.
    Falls du Firefox installiert hast, schau dir mit LiveHTTPHeaders an, was gesendet wird, oder nenne die betroffene URL.

    Die Serverausgabe kannst du im Falle des Apache mit AddDefaultCharset, AddCharset und RemoveCharset ändern.

    Ich muss die Dateien als UTF-8 ohne BOM abspeichern, da es sonst z.B. nicht mit Sessions klappt ("headers already sent ").

    Das Aktivieren des Ausgabepuffers erweist sich nicht nur in solchen Fällen als nützlich, behebt allerdings nicht die Ursache deines Problems (auch wenn es bei dir mit deinem Browser so aussehen mag).

    1. Hello,

      das Problem scheint aber im Magic File zu stecken.
      Ich habe das auch schon öfter gehabt, aber noch keine rechte Muße gehabt, es wirklich zu untersuchen. Entweder man ändert das Default Character Set, wie Du schon schriebst, oder man nimmt eine eigenständige Dateiendung für die Dateien. z.B. HTMA und HTMU oder sonst irgendwelchen Quatsch.

      Ich hatte es auch mit einem "ForceType" probiert, aber das haben die damit bespielten Webserver auch nicht gemocht.

      http://httpd.apache.org/docs/2.0/mod/core.html#forcetype

      Sie haben dann trotzdem mit UTF-8 vermatschte Ansi-Files gesendet, d.h. dass z.B. die Umlaute alle kaputt waren.

      Ich habe leider nicht aufgeschrieben, welche Konstellationen das betraf. Werde ich aber wohl in Zukunft mal machen.

      Harzliche Grüße vom Berg
      http://www.annerschbarrich.de

      Tom

      --
      Fortschritt entsteht nur durch die Auseinandersetzung der Kreativen
      Nur selber lernen macht schlau

  3. Hallo,

    wenn ich eine Datei als UTF-8 ohne BOM abspeichere

    Wo abspeicherst und wie kommt die Datei dorthin?

    und über den Webserver im Browser aufrufe dann steht die Codierung nicht auf UTF-8 und Sonderzeichen werden falsch ausgegeben. Wenn ich die Datei als "normales" UTF-8 abspeicher, dann klappt alles.

    Was ist "normales" UTF-8 für dich? BOM ist für UTF-8 nicht erforderlich (UTF-8 kennt nur eine Byte-Richtung), es wird eher davon abgeraten BOM für UTF-8 zu verwenden.

    Auch ein zusätzliches <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> bringt da nichts.

    HTTP-Header hat vorrang. Ist er richtig gesetzt?

    Ich muss die Dateien als UTF-8 ohne BOM abspeichern, da es sonst z.B. nicht mit Sessions klappt ("headers already sent ").

    Mache ich da was falsch?

    Das passiert bei etwas älteren PHP-Versionen, da kommt es dazu, dass PHP erst gar nicht mehr dazukommt Header zu senden.

    Grüße
    Thomas

    1. Hallo,

      wenn ich eine Datei als UTF-8 ohne BOM abspeichere

      Wo abspeicherst und wie kommt die Datei dorthin?

      Egal. Lokal anspeichern und per ftp auf dem Server, oder die Änderung der Codierung direkt auf dem Server.

      und über den Webserver im Browser aufrufe dann steht die Codierung nicht auf UTF-8 und Sonderzeichen werden falsch ausgegeben. Wenn ich die Datei als "normales" UTF-8 abspeicher, dann klappt alles.

      Was ist "normales" UTF-8 für dich? BOM ist für UTF-8 nicht erforderlich (UTF-8 kennt nur eine Byte-Richtung), es wird eher davon abgeraten BOM für UTF-8 zu verwenden.

      Mit normal meine ich "mit BOM". Wenn ich die Datei so abspeicher, dann ist alles i.O. Wenn ich auch UTF8- ohen BOM ändere, dann klappt es mit dem Umlauten, die Codierung ist ISO...

      Auch ein zusätzliches <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> bringt da nichts.

      HTTP-Header hat vorrang. Ist er richtig gesetzt?

      OK. der Header muss gesetzt werden. Dann klappt es. Ist nur komisch, dass es ohne gesetzten Header auch mit UTF-8 mit BOM auch klappt, ohne aber nicht.

      Ich muss die Dateien als UTF-8 ohne BOM abspeichern, da es sonst z.B. nicht mit Sessions klappt ("headers already sent ").

      Mache ich da was falsch?

      Das passiert bei etwas älteren PHP-Versionen, da kommt es dazu, dass PHP erst gar nicht mehr dazukommt Header zu senden.

      Grüße
      Thomas

      Muss ich eigentlich alle Dateien (css, js und alle includes) auch als UTF-8 Dateien abspeichern. Oder genügt das in der "Hauptdatei". Oder würde der gesetzte Header auch schon reichen?

      Stoffel

      1. Hallo,

        Wo abspeicherst und wie kommt die Datei dorthin?
        Egal. Lokal anspeichern und per ftp auf dem Server, oder die Änderung der Codierung direkt auf dem Server.

        Ganz egal ist es nicht, weil es auch "auf dem Weg" zum Server vorkommen kann (muss aber nicht) dass ein Programm meint, er muss da was "richtigstellen".

        Wenn ich die Datei so abspeicher, dann ist alles i.O. Wenn ich auch UTF8- ohen BOM ändere, dann klappt es mit dem Umlauten, die Codierung ist ISO...

        Den Satz verstehe ich nicht.

        Muss ich eigentlich alle Dateien (css, js und alle includes) auch als UTF-8 Dateien abspeichern. Oder genügt das in der "Hauptdatei". Oder würde der gesetzte Header auch schon reichen?

        CSS und JS muss du nicht, bei includes ist es aber besser wenn du dafür sorgst, dass am Ende nur eine Zeichenkodierung innerhalb einer Seite gibt. Sprich die inludes sollten so Kodiert werden wie die Seite in der sie eingebunden werden.

        Grüße
        Thomas

        1. Hello out there!

          Sprich die inludes sollten so Kodiert werden wie die Seite in der sie eingebunden werden.

          Oder in Includes gar nur Basic Latin (ASCII-Zeichen) U+0020 bis U+007E verwenden [http://forum.de.selfhtml.org/archiv/2005/8/t112994/#m717724]

          See ya up the road,
          Gunnar

          --
          „Wer Gründe anhört, kommt in Gefahr nachzugeben.“ (Goethe)
      2. Ist nur komisch, dass es ohne gesetzten Header auch mit UTF-8 mit BOM auch klappt, ohne aber nicht.

        Nicht komisch, sondern ein Browser, der dem BOM mehr Glauben schenkt als den Angaben im HTTP-Kopf und im <meta>-Element. Es gibt ja auch einen gewissen Browser, der einen als normalen Text markierten HTML-Code als HTML-Seite und nicht wie gewünscht als normalen Text anzeigt.

        Muss ich eigentlich alle Dateien (css, js und alle includes) auch als UTF-8-Dateien abspeichern.

        Bei CSS- und Javascript-Dateien musst du selbst wissen, ob du es für nötig erachtest, solltest aber wissen, dass mit diesen Daten standardmäßig iso-8859-1 verknüpft ist und ein anderer Zeichensatz entsprechend per Content-Type gemeldet werden muss.
        Dateien, die per include in eine andere eingebunden werden, sollten tunlichst mit dem Zeichensatz daherkommen, mit dem die einbindende Datei erstellt wurde.

        Oder würde der gesetzte Header auch schon reichen?

        Die Content-Type-Angabe sagt nur, was vom Server kommt. Dafür, dass deine Daten dieser Angabe entsprechen, musst du schon selbst sorgen.

  4. Danke an alle für Eure Antworten...