phpbar.de logo

Mailinglisten-Archive

[php] uft8 verarbeiten

[php] uft8 verarbeiten

Peter Bieling net2 at media-palette.de
Son Aug 27 14:28:57 CEST 2006


Hallo Ringo,

[...]
> Aktuelles Problem:
> Die Klasse bekommt Eingaben von einem Formular mit
> UTF8 Zeichensatz.
> Aus "Müller" wird also "Müller" und damit hat schon
> die Validierungsmethode der Klasse ein Problem, weil
> die im Namen zwar deutsche Umlaute zulässt, aber
> eben nicht diese anderen wilden Zeichen.
> 
> Nun kann die Klasse aber von diversen Formularen und
> auch von unterschiedlichen Entwicklern eingesetzt
> werden, d.h. ich kann nicht annehmen, dass immer
> UTF8 kodierte Umlaute ankommen.
> 
> Wie geht ihr mit solchen Situationen um? Muss ich den
> Entwickler dazu anhalten, meine Klasse immer nur
> mit Daten zu füttern, die vorher mit utf8_decode()
> behandelt sind?
> Oder implementiere ich diese Dekodierung grundsätzlich
> selbst in meiner Klasse? Sollte man vorher die Strings
> auf solche Kodierung testen oder legt man sich bei
> Formularen sowieso immer auf UTF8 fest?

Nach Möglichkeit sollten die Formulare schon einheitlich sein.
Wenn das nicht der Fall ist, kannst Du mit Hilfe von mb-detect-encoding
http://de.php.net/manual/de/function.mb-detect-encoding.php
herausfinden, welcher Zeichensatz verwendet wird.
Wichtig ist auch die Frage, wie das Encoding der DB aussieht. Wenn in 
der Datenbank Latin-1 gespeichert wird, würde ich die UTF-8-Zeichen 
vorher umwandeln. Ansonsten halt umgekehrt Latin1 in  UTF-8.

> Sollte man PHP irgendwie auf UTF8 umschalten, damit
> die Umlaute von vornherein korrekt ankommen?

Die Fähigkeiten von PHP5 mit UTF-8 richtig umzugehen sind beschränkt, 
daher gibt es auch die mb-Funktionen, die den Mangel ausgleichen sollen. 
Mit PHP6 soll dann alles anders werden. ;-)
Die Codierung des PHP-Skripts selbst als UTF-8 bringt nichts, es sei 
denn, man verwendet UTF-8 um Variableninhalte direkt lesbar in den 
Quelltext zu schreiben.

> Legt man in der Dokumentation der Klasse fest, dass nur
> ISO8859-1 Zeichen angeliefert werden dürfen?

Wenn Du nur Latin-1 haben willst, dann musst Du halt entsprechend 
umwandeln. s.o. Eine Möglichkeit wäre, mit Entities zu arbeiten:
Für ü -> ü Das hat halt Vor- und Nachteile. Vorteile sind die 
richtige Darstellung, egal wie die HTML-Ausgabe codiert ist, und die 
Speicherbarkeit als ASCII. Ein Nachteil ist, dass man alle Strings 
konvertieren muss, nicht nur die mit dem unerwünschten Zeichensatz, ein 
weiterer die schlechtere Lesbarkeit.

> Fragen über Fragen.
> Ich hoffe auf eine paar hilfreiche Antworten. Danke.

Sicherlich hilft Dir diese Seite weiter:
http://www.phpwact.org/php/i18n/charsets?s=utf8

Viele Grüße

Peter
-- 
http://www.media-palette.de/

php::bar PHP Wiki   -   Listenarchive