Stefan_M: Sonderzeichen-Darstellungsfehler nicht kleinzukriegen

Hallo und schönen Tag,

ich habe mit dem PHP-Gästebuch auf meiner HTML-Seite ein Sonderzeichendarstellungsproblem und bin am Ende mit meinem Latein (auch was Google-Suchanfrage angeht). Ich möchte mein Problem erst beschreiben und dann unten aufzählen, was ich schon alles erfolglos probiert habe.

Ich verwende das Freeware-PHP-Gästebuch iV Guestbook v4.1 von www.innovanic.de (Seite zur Zeit nicht verfügbar bzw im Umbau).

Die Sonderzeichen werden auf der HTML-Seite, die das Gästebuch einbettet falsch dargestellt. Ein "ö" wird da zum "Ã�¶", das Wort "Grüße" zb wird zu "GrÃ�¼Ã��e" - denkbar hässlicher Fehler.

Interessanterweise ist das "�" sogar im Quelltext (dargestellt von meinem Firefox) der fertigen HTML-Seite.

Lösungsansätze bisher:

Das Charset im HTML-Head geändert -> hilft nicht. Die Umlaute werden nur anders falsch dargestellt.

htmlentities(...) einfach auf die gesamte einbindung des gästebuchs.
So:

echo (  
htmlentities ( include '../guestbook/ivguestbook.php', ENT_HTML401 , "ISO-8859-15" , true)  
) ;

Habe mehrere Einstellungen dieser Funktion probiert (flags, charset..)

Ein anderer Versuch die Sonderzeichen rauszufiltern:

  
$gb = include '../guestbook/ivguestbook.php';  
$gb = str_replace("ö", "ö", $gb);  
echo ( $gb );

Dummerweise kann ich im Notepad++ das "�"-Zeichen nicht darstellen. . .

Ich bin nicht Coder genug um den Fehler eventuell im Code des Gästebuchs zu finden.

Hat jemand eine Idee? Ich bin sehr dankbar für jede Art von Hilfe.
Die betroffene Seite findet ihr übrigens hier.

http://nofashion.at/html/contact.php

Schönen Gruß und danke im Vorraus an jeden, der sich meiner annimmt.
Stefan

  1. Vielleicht fehlt deinem Script das noch
    header('Content-Type: text/html; charset=utf-8');

    1. Om nah hoo pez nyeetz, Encoder!

      Vielleicht fehlt deinem Script das noch
      header('Content-Type: text/html; charset=utf-8');

      hinzuzufügen wäre, dass auch die Dateien als "UTF ohne BOM" gespeichert werden müssen, denn nur weil auf einem Marmaladenglas Nutella draufsteht, muss da noch lange kein Nutella drin sein.

      Matthias

      --
      1/z ist kein Blatt Papier.

  2. Tach!

    ich habe mit dem PHP-Gästebuch auf meiner HTML-Seite ein Sonderzeichendarstellungsproblem und bin am Ende mit meinem Latein (auch was Google-Suchanfrage angeht). Ich möchte mein Problem erst beschreiben und dann unten aufzählen, was ich schon alles erfolglos probiert habe.

    Probier es mal mit den Grundlagen. Lies mal den Themenschwerpunkt Zeichenkodierung, das sollte für den Anfang ausreichen.

    Ich verwende das Freeware-PHP-Gästebuch iV Guestbook v4.1 von www.innovanic.de (Seite zur Zeit nicht verfügbar bzw im Umbau).

    Wenn der Autor sich nicht darüber ausgelassen hat, was man beim Einbinden alles zu beachten hat, hat er sich möglicherweise keine Gedanken um Zeichenkodierung gemacht.

    Die Sonderzeichen werden auf der HTML-Seite, die das Gästebuch einbettet falsch dargestellt. Ein "ö" wird da zum "Ã�¶", das Wort "Grüße" zb wird zu "GrÃ�¼Ã��e" - denkbar hässlicher Fehler.

    Das sieht total verkorkst aus. Da ist nicht nur eine falsche Umkodierung oder Interpretation sondern anscheinend gleich mehrere passiert.

    Das Charset im HTML-Head geändert -> hilft nicht. Die Umlaute werden nur anders falsch dargestellt.

    Wenn du nur deinen Namen änderst, bleibst du trotzdem derselbe. Wenn du dem Browser mit der charset-Angabe bekanntgibst, dass er UTF-8 zu erwarten hat, dann musst du ihm das auch liefern.

    htmlentities(...) einfach auf die gesamte einbindung des gästebuchs.

    htmlentities() ist unnötig. Für den Kontextwechsel braucht man lediglich htmlspecialchars(). Alle anderen Zeichen können und sollten in der angegebenen Kodierung direkt verwendet werden, besonders bei UTF-8.

    $gb = include '../guestbook/ivguestbook.php';

    Ein include liefert nur dann etwas brauchbares zurück, wenn die inkludierte Datei ein return beendet wird. Das ist jedoch eher unüblich. Du kannst ja mit var_dump() anschauen, was konkret zurückkommt. Es werden sicher nicht die Gästebucheinträge sein, denn die könnten dann nur Plaintext sein. Anderenfalls sähest du durch dein htmlentities() den HTML-Code in deiner Browser-Ausgabe, weil auch alle <>&"-Zeichen in Entitys umgewandelt würden.

    Ich bin nicht Coder genug um den Fehler eventuell im Code des Gästebuchs zu finden.

    Wenn das nicht funktioniert, solltest du ein anderesn nehmen, eins bei dem der Autor in seiner Einbindungsanleitung durchblicken lässt, dass er auch dem Thema sein Aufmerksamkeit gewidmet hat.

    http://nofashion.at/html/contact.php

    Kein charset im HTTP-Header, also wird die Angabe im Meta-Element verwendet. Die sagt, es wäre UTF-8, aber schon der Text des Seitengerüsts ist nicht UTF-8-kodiert sondern ISO-8859-1. Und gelegentlich wurden Entitys statt der Zeichen direkt verwendet, zum Beispiel bei "Schreib uns Deine Zeilen ins G&auml;stebuch". Dieses ä wird dann auch richtig angezeigt. Aber wenn du dein Zeichenkodierungsproblem ordentlich gelöst hast, kannst du auch an solchen Stellen ein richtiges ä nehmen.

    dedlfix.