Moin!
Der erxte Aspekt der Frage hat sich schon erledigt. Eine Funktion habe ich doch noch gefunden unter
http://www.php.net/manual/de/function.mb-detect-encoding.phpDer zeite Aspekt der Frage bleibt aber bestehen: wie funktioniert es?
Wo sind erkennbare Zeichen/Lücken/Folgen/usw., um das Ganze abzusichern?
Es gibt keine Möglichkeit, einfach eine Bytefolge zu untersuchen, um daraus mit 100% Garantie das exakt verwendete Encoding zu ermitteln.
Man kann Ausschlußverfahren anwenden: Wenn eine Bytefolge nicht in ein Codierschema paßt, weil Bytes oder Kombinationen von Bytes vorkommen, die es dort nicht gibt, dann kann es das Schema nicht sein - aber noch jedes andere.
Eventuell ließen sich auch statistische Maßnahmen anwenden, die den Inhalt analysieren und mit Wahrscheinlichkeiten operieren - das ist dann aber von "Sicherheit" weit entfernt.
Problematisch ist insbesondere, wenn Codierungen zu großen Teilen identisch sind, und nur die Details unterschiedlich, wie beispielsweise ISO-8859-1, Windows-1252 und ISO-8859-15. Solange nur Zeichen vorkommen, die in allen Codierungen gleich sind, ist es egal, welche Codierung festgestellt wird - spannend wird es, wenn Zeichen vorkommen, die als Bytewert in allen Schemata definiert sind, aber jeweils eine unterschiedliche Bedeutung haben.
Als klassisches Beispiel sei nur auf das Eurozeichen verwiesen: In ISO-8859-1 existiert es nicht, der Bytewert fürs Euro codiert dort das allgemeine Währungssymbol ¤.
Es ist deshalb unerläßlich, die Codierung immer explizit mit anzugeben, um Probleme beim Wiedereinlesen auszuschließen.
- Sven Rautenberg
"Love your nation - respect the others."