Harald Henkel: Zeichensatz und XML

Hallo zusammen.

Ich habe ein Problem mit Zeichensätzen.
Ich habe eine MySql-Datenbank in der Texte in Windows-1252 abgelegt sind mit Sonderzeichen wie Elipsen etc. die nicht zu ISO-8859-1 gehören.

Ich möchte aus dieser Datenbank mit PHP einen XML-Output generieren, aber egal was ich anstelle (welchen Charset) ich fürs Dokument auswähle oder wie ich auch versuche die Texte umzuwandeln, die Ausgabe wird an einem der Zeichen abgebrochen.

Wenn ich die Texte in HTML-Entities umwandle wird die ausgabe zwar erstellt, aber dann kommt das nächste Problem.

Das ganze soll in ein XUL-Seite in Firefox eingelesen werden (per AJAX, also mit JavaScript).
Und wie ich auch gesucht habe, finde ich keine JavaScript-Funktion, die mir Texte mit HTML-Entities in Text zurückverwandelt und wenn ich die Texte aus den Attributen meines XML-Dokuments in ein XUL-Widget (z.B. eine Listbox) einlese, werden die HTML-Entities pur ausgegeben, also z.B. ü

Also wie kann ich PHP davon überzeugen bei saveXML den Text entsprechend der Zeichensatzangabe zu akzeptieren (z.B. CP1252) oder wie kann ich in JavaScript die Texte einfach zurückumwandeln.
Muß ich dafür das Rad neu erfinden?

Servus,
Harald

  1. Also, falls es weiterhilft:

    Folgendes bekomme ich in der php.log Datei, jedesmal wenn saveXML() abbricht:

    [11-Apr-2006 18:32:32] PHP Warning:  DOMDocument::saveXML() [<a href='function.saveXML'>function.saveXML</a>]: output conversion failed due to conv error, bytes 0xFC 0x72 0x20 0x4A in <pfad>\Personen.php on line 135

    Das Dokument hört dann einfach mit dem letzten Zeichen vor dem Umlaut etc. auf und Firefox gibt eine Fehlermeldung aus:

    XML-Verarbeitungsfehler: Ungeschlossenes Token
    Adresse: http://localhost:81/php/Personen.php
    Zeile Nr. 6, Spalte 3:

    Ich habe mittlerweile mal mit bin2hex die Strings in Hex-Form ins XML-Dokument schreiben lassen, um zu sehen, welche Character-Codes tatsächlich ankommen und es ist z.B. FC für ein Ü wie im ISO-8859-1 und im Windows-1252 üblich.

    Servus,
    Harald

    1. Hallo,

      Folgendes bekomme ich in der php.log Datei, jedesmal wenn saveXML() abbricht:

      [11-Apr-2006 18:32:32] PHP Warning:  DOMDocument::saveXML() [<a href='function.saveXML'>function.saveXML</a>]: output conversion failed due to conv error, bytes 0xFC 0x72 0x20 0x4A in <pfad>\Personen.php on line 135

      Das Dokument hört dann einfach mit dem letzten Zeichen vor dem Umlaut etc. auf und Firefox gibt eine Fehlermeldung aus:

      Wie wäre es mit sowas:

      $dom = new DOMDocument('1.0', 'windows-1252');
      $dom->saveXML();

      Grüße
      Thomas

      1. $dom = new DOMDocument('1.0', 'windows-1252');
        $dom->saveXML();

        Nein, das sowas naheliegendes habe ich selbstverständlich schon probiert.

        Aber ich habe mittlerweile die Lösung:
        UTF-8 und die Strings von der Datenbank mit utf8_encode umwandeln.
        Und schon klappts ;-)

        In PHP gibt es so viele Packages und Funktionen, man muß nur wissen welche man benötigt. Und auf die bin war ich bisher nicht gestoßen, trotz 2 Tage suchen mit Google etc.

        Habe den Hinweis heute in irgendeinem französichen Forum gefunden.

        Trotzdem danke :-)

        Servus,
        Harald