dedlfix: new DOMDocument() Problem

Beitrag lesen

Tach!

ich möchte aus einem String den verwendeten Charset auslesen.

Dabei sind Ergebnisse zwischen "vielleicht richtig" und "unmöglich" zu erzielen. Wenn man UTF-8 als eine mögliche Kodierung annimmt, kann man testen, ob das Dokument den UTF-8-Regeln entspricht. Dabei kann man falsch liegen, wenn zufällig zwei Bytes eine gültige UTF-8-Sequenz ergeben, aber Zeichen anderer Kodierung darstellen sollen. Bei Ein-Byte-Kodierungen ist es unmöglich, die passende zu erkennen. Woran will man denn festmachen, ob das Byte nun das Zeichen aus der Kodierung oder aus der anderen Kodierung ist, wenn alle die Bytes 0..255 verwenden?

Praktisch kannst du so vorgehen, dass du dich auf UTF-8 und ISO-8859-1 oder Windows-1252 beschränkst und alles andere als unwahrscheinlich ignorierst. Die Antwort auf die Frage ob eine gültige UTF_8-Sequenz vorliegt, entscheidet dann zwischen den beiden Möglichkeiten.

Ich habe es mit new DOMDocument() probbiert, doch leider bricht das Script ab, wenn ich new DOMDocument() in der Class verwenden möchte.

Ein XML-Parser ist darauf angewiesen, den Text lesen zu können. Er muss dazu bereits wissen, welche Kodierung vorliegt, sonst weiß er ja nicht, für welche Zeichen die gelesenen Bytes stehen. Üblicherweise gehen XML-Parser von UTF-8 aus, wenn ihnen keine andere Kodierung mitgeteilt wird.

Wenn ich es ausserhalb der Class verwende funktioniert es einwandfrei.

Was auch immer das konkret bedeutet ...

Das kuriose ist - ich bekomme in den Logs keinen Error angezeigt und die Ausgabe bleibt beim Skript-Aufruf auch nur weiß.

Dann solltest du mal die Einstellungen zu error_reporting und display_errors sowie error_log und log_errors überprüfen. Deine php.ini ist bestimmt für Produktivumgebungen konfiguriert.

Anders gefragt - gibt es ggf. noch eine andere Möglichkeit aus einem String den verwendeten Charset auszulesen?

"Auslesen" kann man nur, wenn man etwas lesen kann. Prinzipbedingt geht es nicht, dass man die Kodierungsinformation innerhalb des Dokuments stehen hat, wenn man nicht zumindest den Teil bereits lesen kann, in dem sie steht. Bei HTML-Dokumenten kann der Browser die im Dokument stehende Information auch nur deshalb lesen, weil er annimmt, dass der erste Teil ASCII-kodiert ist. (Eine der Möglichkeiten. Eine andere wäre, die BOM auszuwerten, wenn eine da ist.) Findet er keine Information, rät er auch nur anhand von Indizien.

Für dich bedeutet das, dass du zunächst auf anderen Wegen die Kodierungsinformation ermitteln musst, und erst dann das Dokument dem XML-Parser übergeben kannst.

dedlfix.