Haftpflicht Blogger
Virtual Server von Host Europe

Deutsche Umlaute ausgeben – Atilde/htmlentities/UTF-8 Problem

| 16. Juli 2009 | Ein Kommentar

Aufgabenstellung:

Aus der MySQL Datenbank der e-Commerce Shopanwendung Magento ist eine Artikeldatei zu erstellen. Bei dieser Datei handelt es sich um eine ASCII Datei, die von einer bestimmten Preissuchmaschine mehrfach täglich gelesen wird.

Problem:

In der Datenbank steht als Artikelbezeichnung :
Tütenkasper
In der Textdatei wird dieser Textstring aber zu:
Tütenkasper

Lösungansatz:

Wie eingangs erwähnt, steht in der Datenbank der dt. Umlaut direkt lesbar (Tütenkasper).
Der Befehl
$product->getName()
erzeugt
Tütenkasper.

Nun wird man spontan zum Befehl htmlentities greifen, um den deutschen Umlaut ü in sein HTML-Equivalent ü umzuwandeln. Doch dann wurdern sich die meisten.
Der Befehl
htmlentities ( $product->getName() )
hat als Ausgabeergebnis
Tütenkasper

Und das kann man nun wahrlich keine Verbesserung nennen und auf der PHP-Manual-Seite fangen alle an, in Ihren Kommentaren zu beklagen, dass die Funktion htmlentities nicht funktioniert und viele schreiben sich eine eigene Umsetzungsroutine, wobei jeder nur die Zeichen umsetzt, die er für wichtig hält.

Lösung:

Wenn man die Ursache des Problems kennt, dann ist die Lösung auch ganz einfach.

Der deutsche Umlaut „ü'“in der Datenbank ist kein normales „ü“, sondern ein UTF-8 Zeichen!  Die MySQL-Datenbank wurde nämlich mit „utf8-unicode_ci“ als Zeichensatz/Kollation angelegt und auch beim Textfeld findet man „utf8-general-ci“ als Kollation.
In der PHP-Referenz zum Befehl htmlentities steht aber ganz klar, dass der Befehl htmlentities defaultmäßig den Zeichensatz ISO-8859-1 (westeuropäischer Zeichensatz) erwartet.  Erhält die Funktion mehr Zeichen, weil eben UTF-8 kodiert, dann wandelt es ganz stur auch diese um.

Wenn man das obige Ausgabeproblem hat, sich das PHP-Manual durchliest und die Parameter richtig wählt, dann klappt es auch mit der Ausgabe.

Der Befehl mit der Funktion ‚htmlentities‘ kombiniert mit der Angabe der Zeichencodierung
htmlentities($product->getName(), ENT_COMPAT, ‚UTF-8‘)
liefert letztendlich das gewünschte Ergebnis
Tütenkasper

Stichworte:

Kategorie: Internet

Kommentare (1)

Trackback-URL | Kommentarfeed

  1. Manfred Roos Achim sagt:

    Danke für den Tipp! Hat mir nach vielen erfolglosen Suchen endlich weiter geholfen. Es funktioniert wunderbar!

Schreibe einen Kommentar

Deine E-Mail-Adresse wird nicht veröffentlicht. Erforderliche Felder sind mit * markiert.