UTF-8 und die Umstellung von Websites auf dieses Encoding

Teil 3: UTF-8 für alle
Kommentare

Insbesondere Upload-Daten werden oftmals ISO-8859-1 kodiert sein. Mittels utf8_encode() können Sie diese Daten in UTF-8 umwandeln. Der Vollständigkeit halber sei an dieser Stelle auch das Encoding Windows-1252 genannt, auch als ANSI bekannt, das ISO-8859-1 stark ähnelt, aber nicht identisch ist.

ANSI-kodierte Dokumente können Sie nicht einfach mit utf8_encode() umwandeln (ebenso wie alle anderen ISO-Zeichensätze), da die Funktion ISO-8859-1 erwartet. Eine ausführliche Behandlung dieser Frage würde den vorliegenden Artikel sprengen, eine mögliche Lösung finden Sie im Kommentar von Aidan Kehoe in der PHP-Dokumentation. Empfohlen sei an dieser Stelle auch die iconv-Extension von PHP.
HTML-Entities Mit dem Siegeszug von UTF-8 durch das Web werden so genannte HTML-Entitäten (HTML-Entities) unwichtiger. HTML-Entitäten sind Codes, die aus dem Zeichenvorrat von ASCII gebildet werden und für mit ASCII nicht darstellbare Zeichen stehen. Sie beginnen mit & und enden mit einem Semikolon (;). Dazwischen steht ein bis zu sechs Zeichen umfassender Code. ästeht z. B. für „ä“, ß für „ß“. Auch wenn die meisten HTML-Entitäten mit UTF-8 überflüssig sind, sind sie doch nicht verboten und funktionieren weiterhin. Die Zeichen &< und > sollten jedoch immer in HTML-Entities kodiert werden, da sie auch von HTML verwendet werden: ,&&lt; und >.
PHP bietet viele leistungsstarke Funktionen zur String-Manipulation, die jedoch ursprünglich für die Verarbeitung von ISO-kodiertem Text entwickelt wurden. Sie erwarten intern pro Zeichen ein Byte. Das wird sich auch voraussichtlich bis zum Release von PHP 6 nicht ändern. Daher kann es bei der Verarbeitung von UTF-8-kodierten Texten mit diesen Funktionen zu Fehlern kommen. So zählt strlen() beispielsweise die verwendeten Bytes eines Texts. Da UTF-8 aber für ein Zeichen auch mehr als ein Byte verwenden kann, entspricht der Rückgabewert der Funktion nicht in jedem Fall der tatsächlichen Zeichenlänge. In manchen Fällen stellt dieser Effekt ein Sicherheitsrisiko dar. So ermöglicht eine falsche Anwendung von htmlentities() sogar die Einschleusung von Junk-Code, wenn nicht UTF-8 als Charset angegeben wird (dritter Parameter), denn sonst erwartet die Funktion ISO-8859-1 kodierten Text. Dasselbe gilt für html_entity_decode(). Abgesehen davon genügt htmlspecialchars() zum Umwandeln der Zeichen, die HTML verwendet (Kasten: „HTML-Entities“). Einen Überblick über die String-Funktionen von PHP und jeweilige Effekte sowie Sicherheitsrisiken bei der Nutzung mit UTF-8 finden Sie im Artikel Handling UTF-8 with PHP.

Fazit

Zeichensatzprobleme bei Websites entstehen in erster Linie durch Durchmischung verschiedener Encodings, aber auch, wenn der Client (Browser) das verwendete Encoding nicht kennt. Nicht umsonst hat UTF-8 sich als Encoding bereits auf vielen Websites durchgesetzt und ist weiter auf dem Vormarsch. Sein großer Zeichenvorrat und seine Rückwärtskompatibilität zu ASCII haben zu einer weiten Verbreitung beigetragen, die wiederum sicherstellt, dass eine UTF-8-kodierte Website von vielen Browsern „verstanden“ wird. Wenn Sie die Nase voll haben – von merkwürdigen Zeichen und unlesbaren Wörtern auf Ihrer Website – stellen Sie Ihre Website noch heute auf UTF-8 um. Das nötige Rüstzeug dazu haben Sie jetzt. Alle Teile: Teil 1, Teil 2, Teil 3
Unsere Redaktion empfiehlt:

Relevante Beiträge

Meinungen zu diesem Beitrag

X
- Gib Deinen Standort ein -
- or -