Problemas de codificação com XMLWriter (PHP)
Tome este código PHP simples:
<code>$xmlWriter = new XMLWriter(); $xmlWriter->openURI('php://output'); $xmlWriter->startDocument('1.0', 'utf-8'); $xmlWriter->writeElement('test', $data); $xmlWriter->endDocument(); $xmlWriter->flush(); </code>
A classe XMLWriter possui um ótimo recurso: ela converte todos os dados que você fornecer para a codificação de saída. Por exemplo, aqui vai converter$data
para UTF-8 porque passei'utf-8'
nostartDocument
função.
O problema é que, no meu caso, o conteúdo de$data
vem de um banco de dados cujo formato de saída é UTF-8 eé, portanto, já em UTF-8. O XMLWriterprovavelmente acha que os dados estão em ISO-8859-1 e converte-os novamente para UTF-8, e eu obtenho símbolos estranhos onde eu deveria receber sotaques.
Atualmente estou usandoutf8_decode
em torno de cada string proveniente do banco de dados, o que significa que estou convertendo de UTF-8 para ISO-8859-1 e, em seguida, o XMLWriter o transforma em UTF-8.
Isso funciona, mas não está limpo:
<code>$xmlWriter->writeElement('test', utf8_decode($data)); </code>
Existe uma solução mais limpa?
EDITAR: mostrando um exemplo 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>