Moin!
Zum Test habe ich die Strings aus der Datenbank die Umlaute enthalten per mb_detect_encoding() auf ihre Zeichsatz getestet: das Ergebnis war UTF-8.
Es gibt keine Funktion, die dir 100% korrekt und zweifelsfrei sagen kann, welche Codierung ein beliebiger String hat.
Der String "Hallo Welt" ist beispielsweise gültiges UTF-8 - und ebenso gültiges ISO-8859-1, ISO-8859-15, Windows-1252, und vermutlich ebenso in allen anderen Codierungen, die kompatibel zu US-ASCII sind. Die PHP-Funktion gibt diese Codierungen ja aber keinesfalls alle aus.
Die Funktion kann aber nicht prüfen, ob ein Zeichen, welches sich im String befindet, in diesem Kontext bei einer Zeichencodierung sinnvoll ist. Das, was man sieht, wenn man UTF-8 nimmt, aber als ISO-8859-1 ausgibt, enthält beispielsweise sehr häufig das Zeichen Ã, gefolgt z.B. von ¼ o.ä. Ein "A-tilde" ist sicher kein böses Zeichen, ein "ein Viertel" ebenfalls nicht - nur in Kombination ergeben Sie für Menschen normalerweise keinen Sinn - das weiß die Funktion ja aber nicht.
Deshalb muß irgendwo in deiner Verarbeitungskette eine Lücke sein, welche die Konvertierung noch nicht korrekt durchreicht. Die mußt du finden und eliminieren.
Btw: Welche DB-Version? Welche Kollation (wenn MySQL > 4.1) hast du gewählt?
- Sven Rautenberg
My sssignature, my preciousssss!