Yeti: Doppelt kodierte UTF8-Zeichen entdecken

Beitrag lesen

Hi,

ich habe zur Zeit ein Problem mit Input, der Pseudo-UTF-8 ist, also UTF-8-Zeichen in ISO-8859-1 kodiert. Mein Code erkennt dann mittels folgender Methode den String als ISO-8859-1:
[CODE lang=php]
// based on phputf8
if (strlen($string) == 0)
    return true;
return (preg_match('/^.{1}/us',$string) == 1);
[/CODE]
(Diese Methode basiert darauf, dass preg_match bei Nicht-UTF-8-Kodierungen kein einziges Zeichen matcht, wenn der Modifier u gesetzt wird.)

Danach wird der ISO-8859-1-String richtigerweise in UTF-8 konvertiert. Leider kommen hin und wieder Daten daher, bei denen die Umlaute bereits UTF-8-kodiert waren, dann aber in ISO-8859-1 zurück konvertiert wurden. Dann werden diese natürlich erneut kodiert, so dass im Grunde für einen Umlaut vier Bytes verwendet werden und ein ü wird zu ü.

Wie kann ich dies verhindern? Soll ich nach dem ersten Zeichen (Ã) des UTF-8-Strings suchen und dann entsprechend umwandeln? Was ist dann mit anderen Sprachen als Deutsch? Trifft das auf die auch zu?

Der Yeti