Kodierungsprobleme mit XMLWriter (PHP)

Nehmen Sie diesen einfachen PHP-Code:

<code>$xmlWriter = new XMLWriter();
$xmlWriter->openURI('php://output');
$xmlWriter->startDocument('1.0', 'utf-8');

$xmlWriter->writeElement('test', $data);

$xmlWriter->endDocument();
$xmlWriter->flush();
</code>

Die XMLWriter-Klasse hat eine nette Funktion: Sie konvertiert alle Daten, die Sie ihr geben, in die Ausgabecodierung. Zum Beispiel wird es hier konvertieren$data zu UTF-8, weil ich bestanden habe'utf-8' in demstartDocument Funktion.

Das Problem ist, dass in meinem Fall der Inhalt von$data stammt aus einer Datenbank mit dem Ausgabeformat UTF-8 undist also schon in UTF-8. Der XMLWriterwahrscheinlich denkt, die Daten sind in ISO-8859-1 und konvertieren sie erneut in UTF-8, und ich bekomme komische Symbole wo soll ich akzente setzen.

Derzeit benutze ichutf8_decode Um jede Zeichenfolge, die aus der Datenbank stammt, wird eine Konvertierung von UTF-8 nach ISO-8859-1 durchgeführt. Anschließend wandelt XMLWriter sie wieder in UTF-8 um.

Das funktioniert, ist aber nicht sauber:

<code>$xmlWriter->writeElement('test', utf8_decode($data));
</code>

Gibt es eine sauberere Lösung?

BEARBEITEN: zeigt ein vollständiges Beispiel

<code>$xmlWriter = new XMLWriter();
$xmlWriter->openURI('php://output');
$xmlWriter->startDocument('1.0', 'utf-8');
$xmlWriter->startElement('usersList');

$database = new PDO('mysql:host=localhost;dbname=xxxxx', 'xxxxx', 'xxxxx');
$database->exec('SET CHARACTER SET UTF8');
$database->exec('SET NAMES UTF8');
foreach ($database->query('SELECT name FROM usersList') as $user)
   $xmlWriter->writeElement('user', $user[0]);   // if the user's name is 'hervé' in the database, it will print 'hervé' instead

$xmlWriter->endElement();
$xmlWriter->endDocument();
$xmlWriter->flush();
</code>

Antworten auf die Frage(1)

Ihre Antwort auf die Frage