Auge: Sonderzeichen / Datenbank / PHP

Beitrag lesen

Hallo

Wenn ich dich recht verstehe müsste es in meinem Fall langen wenn ich im Head angebe

<meta http-equiv="content-type" content="text/html; charset=UTF-8">

Nein.

oder sollte ich, nachdem die DB Kollation ja latin1_swedish_ci ist angeben ISO 8859-1

Nein.

Oder mache ich es mir da zu einfach?

Ja.

Es reicht nicht, einfach nur zu behaupten, das Dokument würde in der Kodierung UTF-8 vorliegen, wenn nicht sicher ist, dass dies auch tatsächlich so ist. Wenn du im Meta-Element „Content-Type“ sagst, dass es sich um den Typ „text/html“ in der Kodierung „UTF-8“ handelt, musst du auch sicherstellen, dass das Dokument mit seiner HTML-Struktur und seinem Inhalt dieser Angabe genügt.

Und um das „nein“ bezüglich der Verwendung von ISO 8859-1 zu unterfüttern, sei gesagt, dass es wohl kaum einen Grund gibt, diese Kodierung mit beschränktem Zeichenvorrat UTF-8 vorzuziehen, wenn man mit UTF-8 so ziemlich alle auf diesem Planeten bekannten Schriftsysteme abbilden kann. Schon die Verwendung von diakritischen Zeichen aus europäischen Sprachen, die auch in der detuschen Sprache verwendet werden, kann mit ISO-8859-1 problematisch werden, ist es aber in UTF-8 nicht.

Das bedeutet, wenn man dieser Empfehlung folgen will, dass sowohl das HTML-Template in UTF-8 vorliegen muss [1], als auch, dass die Nutzdaten, egal, woher sie stammen, dieser Kodierung entsprechen müssen. Das gilt …

  • … für deine Datenbankverbindung, mit der du die Daten aus der Datenbank holst. Lege für sie explizit fest, dass du in der Kodierung UTF-8 mit der Datenbank kommunizieren willst, damit die Daten auch in UTF-8 an dich herausgereicht bzw. beim schreiben an die Datenbank übergeben werden. Welche Funktion dafür zu benutzen ist, kommt auf die Funktionen an, die du für die Verbindung mit der Datenbank benutzt.
  • … für deine PHP-Skripte, die die Daten aus der Datenbank verarbeiten und daraus eine Ausgabe generieren und genauso für jene Skripte, die Eingaben für die Datenbank aufbereiten und sie an diese zum speichern übergeben. Dazu beschäftige die mit den Multibyte-String-Funktionen, die du statt der normalen String-Funktionen benutzen musst und speziell der Funktion mb_internal_encoding, mit der du für den Skriptlauf festlegst, dass alle Stringverarbeitungen in der Kodierung UTF-8 erfolgen werden.
  • … schlussendlich auch für die Auslieferung deiner generierten oder statischen HTML-Dokumente an die Clients (z.B. Browser). Hier – und erst hier – kommt dein Meta-Element ins Spiel. Es ist allerdings nur Ersatz für den vom Webserver oder PHP-Skript gelieferten HTTP-Header für die benutzte Kodierung für den Fall, dass dieser, aus welchen Gründen auch immer, nicht vorhanden ist.

Tschö, Auge

--
Wenn man ausreichende Vorsichtsmaßnahmen trifft, muss man keine Vorsichtsmaßnahmen mehr treffen.
Toller Dampf voraus von Terry Pratchett

  1. Das HTML-Gerüst selbst könnte auch in einer anderen, zu UTF-8 kompatiblen Kodierung vorliegen. Aber das will man nicht, weil man so bei späteren Änderungen immer darauf achten müsste, dass sich an der Kodierung nichts ändert. Da die Kodierung nicht in irgendwelchen Metadaten einer Datei gespeichert werden kann, erraten die Editoren sie anhand des Inhalts, liegen dabei aber gelegentlich auch falsch. ↩︎