Thom: Keine Header wegen UTF-8 Anhängsel

Hallo,

Als gute Tat der Woche habe ich mir vorgenommen auf die UTF-8 Kodierung umzusteigen. Also entsprechend befähigten Editor (Notepad++ 3.7) geholt und ein neues Dokument angefangen. Soweit sogut.

Doch dann habe ich etwas PHP Code eingefügt und jetzt der Schock. Header wollen nicht. Das liegt an drei Zeichen, die immer bei UTF-8 Dateien dabei sind.  (i mit zwei Punkten, Doppelpfeil nach rechts und umgedrehtes Fragezeichen). Im Editor/Browser selbst werden sie nicht angezeigt, est wenn ich in den Hex-Modus umschalte. Nun meine Frage: Wie krieg ich die Weg? Darf ich sie überhaupt entfernen?

Dankbar für jede Antwort, Thom

  1. Hi Thom!

    Eine Suche nach "BOM" wird einige Threads im Archiv hervorbringen. :)

    MfG H☼psel

    --
    "It's amazing I won. I was running against peace, prosperity, and incumbency."
    George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
    Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
    1. echo $begrüßung;

      Eine Suche nach "BOM" wird einige Threads im Archiv hervorbringen. :)

      Ja, aber so viel Information steckt im Thema UTF-8-BOM nicht drin, als dass man sie nicht eben schnell anführen könnte:

      Die BOM (Byte Order Mark) ist für UTF-8 optional, da die Reihenfolge der Bytes eines Zeichens unter UTF-8 genau definiert ist. Man kann sie also bedenkenlos entfernen. Sollte der Editor keine Konfigurationsmöglichkeit dafür bieten, wäre ein Wechsel angeraten.

      echo "$verabschiedung $name";

      1. Die BOM (Byte Order Mark) ist für UTF-8 optional, da die Reihenfolge der Bytes eines Zeichens unter UTF-8 genau definiert ist. Man kann sie also bedenkenlos entfernen. Sollte der Editor keine Konfigurationsmöglichkeit dafür bieten, wäre ein Wechsel angeraten.

        Hallo,

        eine derartige Möglichkeit gibt es schon (als Häckchen), wenn ich diese wähle schaltet der Editor in den Modus "ANSI als UTF-8". Vermutlich wird dann auch als UTF-8 gespeichert, aber wie kann ich das herausfinden?

        Danke. Thom

        1. Hallo Thom.

          eine derartige Möglichkeit gibt es schon (als Häckchen), wenn ich diese wähle schaltet der Editor in den Modus "ANSI als UTF-8". Vermutlich wird dann auch als UTF-8 gespeichert, aber wie kann ich das herausfinden?

          Einfache Möglichkeit: PHP meckert nicht mehr.

          Aufwendigere Möglichkeit: suche dir einen Hex-Editor, schreibe in diesem Modus „Ä“ in eine Datei und öffne diese Datei mit dem Hex-Editor.

          Wird das „Ä“ als „C3 84“ gekennzeichnet, wurde das Zeichen korrekt UTF-8-kodiert abgespeichert.

          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]
        2. echo $begrüßung;

          eine derartige Möglichkeit gibt es schon (als Häckchen), wenn ich diese wähle schaltet der Editor in den Modus "ANSI als UTF-8". Vermutlich wird dann auch als UTF-8 gespeichert, aber wie kann ich das herausfinden?

          Die von Ashura erwähnte Hex-Editor-Methode ist die sicherste, denn der Hex-Editor zeigt Byte für Byte an, was in der Datei steht. Doch das ist auch die aufwändigste, denn dazu sollte man wissen bzw. nachschlagen, welche Bytes für ein bestimmtes Zeichen verwendet werden.

          Eine weitere Möglichkeit wäre, die Datei im Browser zu öffnen und dann über "Ansicht" -> "(Zeichen)kodierung" ein paar Zeichenkodierungen durchzuprobieren. Der Browser versucht dann die Datei gemäß der ausgewählten Kodierung zu interpretieren. Wenn die Anzeige mit dem von dir vorgesehen Ergebnis übereinstimmt, ist das Dokument gemäß dieser Zeichenkodierung kodiert.

          echo "$verabschiedung $name";

      2. Hi dedlfix!

        Ja, aber so viel Information steckt im Thema UTF-8-BOM nicht drin, als dass man sie nicht eben schnell anführen könnte:

        Ja, ich bin faul. :-)
        Meine Intention war auch eher, Thom zu zeigen, dass dieses Thema schon oft diskutiert wurde. Außerdem wollte ich ihm eine möglichst vollständige Antwort präsentieren, da ich wirklich kein Experte in solchen Dingen bin.

        MfG H☼psel

        --
        "It's amazing I won. I was running against peace, prosperity, and incumbency."
        George W. Bush speaking to Swedish Prime Minister unaware a live television camera was still rolling, June 14, 2001
        Selfcode: ie:% fl:( br:> va:) ls:& fo:) rl:? n4:& ss:| de:] js:| ch:? sh:( mo:) zu:)
  2. morning,

    alternativ zur verstuemmelung der UTF-8 Dateien kannst du natuerlich dem Webserver freundlich bitten im HTTP-Header im Content-Type utf8 als charset zu senden. Dan reagieren auch die Browser aus der Mozilla serie so wie du das willst. Apache zum Beispiel macht das in der in der htaccess (wenn es in der global httpd.conf freigeschalten ist) mit siem Befehel:

    AddDefaultCharset utf8

    Es gibt mehrere moeglichlkeiten hier aktiv zu werden.

    cya
     -T

    1. Hallo neri.

      alternativ zur verstuemmelung der UTF-8 Dateien …

      Wieso „Verstümmelung“? Die BOM ist optional und dies wurde auch in diesem Thread bereits erwähnt.

      kannst du natuerlich dem Webserver freundlich bitten im HTTP-Header im Content-Type utf8 als charset zu senden.

      [ ] Du hast das Ausgangsposting gelesen.

      Thom hatte ein Problem mit dem Aussenden eines Content-Type-Headers durch PHP, weil sich am Anfang der jeweiligen Datei die BOM befand, vor dem Senden von HTTP-Headern aber noch kein HTTP-Body versandt werden darf.

      Dies kann man nicht beheben, in dem man ein DefaultCharset festlegt.

      Einen schönen Montag 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]