Sven Rautenberg: UTF8 und PHP

Beitrag lesen

Moin!

Die Zeichenkodierung der GET- bzw. POST-Werte ist davon abhängig, welche Zeichenkodierung im HTTP-Header (bzw. im passenden <meta>-Element) für das HTML-Dokument angegeben wurde, denn dazu passend sendet der Browser die Daten kodiert ab.

Naja, so ungefähr. Wenn man im Formular das Attribut accept-charset nutzt, sendet der Browser in dieser Zeichenkodierung. Hier etwas anderes anzugeben als für die ausgegebene Seite ist allerdings sehr unsinnig. Und insgesamt etwas anderes als UTF-8 zu nutzen ist auch nicht sehr schlau... Aber man kann es tun.

Die sogenannte mangelnde UTF-8-Unterstützung in PHP macht sich dann bemerkbar, wenn Du Strings mit Sonderzeichen manipulieren willst. So ist z.B. echo strtolower("AÖÜ"), strtoupper("äöüß"); nicht ganz unproblematisch, da intern die Sonderzeichen je nach Einstellung der LOCALES nicht mitkodiert werden. Jedoch hilft hier das Handbuch (und die dort vermerkten User Comments) kompetent weiter.

Korrekt, alle Stringmanipulationen - inklusive regulären Ausdrücken - sind in PHP problematisch, wenn man nicht drüber nachgedacht hat, was man eigentlich genau will.

strlen() liefert beispielsweise immer die Anzahl der Bytes im String. Das ist bei UTF-8 aber nicht gleich der Anzahl der Zeichen.

PHP hat aber intern kein Problem, beispielsweise Funktions- und Variablennamen mit Sonderzeichen (also aus dem Nicht-ASCII-Bereich, ab Codepoint 128 aufwärts) zu verwenden. Die UTF-8-Kodierung sorgt ja gerade dafür, dass beispielsweise Umlaute in zwei für menschen komisch aussehende, aber technisch absolut ungefährliche Zeichen aufgespalten werden.

Das einzige Problem hierbei wäre, wenn man in einem UTF-8-codierten PHP-Skript eine Datei includiert, die z.B. ISO-8859-1-kodiert ist, und beide Dateien nutzen die Variable $änderung - das ist wegen des Codierungsunterschieds für den Umlaut nicht dieselbe Variable!

Aber das Vermeiden von Umlauten in allem, was eventuell Konflikte verursachen könnte (Variablen, Dateinamen, URLs,...), ist Programmierern ja schon irgendwie angeboren. ;)

- Sven Rautenberg