Problemas de codificación con XMLWriter (PHP)

Toma este simple código PHP:

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

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

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

La clase XMLWriter tiene una buena característica: convertirá cualquier dato que le des a la codificación de salida. Por ejemplo aquí se convertirá$data a UTF-8 porque pasé'utf-8' en elstartDocument función.

El problema es que en mi caso el contenido de$data proviene de una base de datos cuyo formato de salida es UTF-8 ypor lo tanto ya está en UTF-8. El XMLWriterProbablemente piense que los datos están en ISO-8859-1 y los convierte de nuevo a UTF-8, y obtengo símbolos extraños donde debo obtener acentos.

Actualmente estoy usandoutf8_decode alrededor de cada cadena que proviene de la base de datos, lo que significa que estoy convirtiendo de UTF-8 a ISO-8859-1, y luego XMLWriter lo convierte de nuevo en UTF-8.

Esto funciona pero no está limpio:

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

¿Hay una solución más limpia?

EDITAR: mostrando un ejemplo completo

<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>

Respuestas a la pregunta(1)

Su respuesta a la pregunta