Problemy z kodowaniem w XMLWriter (PHP)

Weź ten prosty kod PHP:

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

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

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

Klasa XMLWriter ma fajną funkcję: będzie konwertować dane, które podasz, na kodowanie wyjściowe. Na przykład tutaj się przekonwertuje$data do UTF-8, ponieważ zdałem'utf-8' wstartDocument funkcjonować.

Problem polega na tym, że w moim przypadku zawartość$data pochodzi z bazy danych, której format wyjściowy to UTF-8 idlatego jest już w UTF-8. XMLWriterprawdopodobnie myśli, że dane są w ISO-8859-1 i konwertuje je ponownie na UTF-8, a ja dostaję dziwne symbole gdzie powinienem uzyskać akcenty.

Obecnie używamutf8_decode wokół każdego ciągu pochodzącego z bazy danych, co oznacza, że ​​konwertuję z UTF-8 na ISO-8859-1, a następnie XMLWriter zamienia go z powrotem w UTF-8.

To działa, ale nie jest czyste:

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

Czy istnieje czystsze rozwiązanie?

EDYTOWAĆ: pokazuje pełny przykład

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

questionAnswers(1)

yourAnswerToTheQuestion