Проблемы с кодировкой XMLWriter (PHP)
Возьмите этот простой код PHP:
<code>$xmlWriter = new XMLWriter(); $xmlWriter->openURI('php://output'); $xmlWriter->startDocument('1.0', 'utf-8'); $xmlWriter->writeElement('test', $data); $xmlWriter->endDocument(); $xmlWriter->flush(); </code>
Класс XMLWriter имеет приятную особенность: он преобразует любые данные, которые вы ему предоставляете, в выходную кодировку. Например, здесь он будет конвертировать$data
в UTF-8, потому что я прошел'utf-8'
вstartDocument
функция.
Проблема в том, что в моем случае содержание$data
исходит из базы данных, формат вывода которой UTF-8 иis therefore already in UTF-8, XMLWriterprobably thinks the data is in ISO-8859-1 and converts it again to UTF-8, and I get weird symbols где я должен получить акценты.
В настоящее время я используюutf8_decode
вокруг каждой строки, поступающей из базы данных, что означает, что я преобразую из UTF-8 в ISO-8859-1, а затем XMLWriter превращает ее обратно в UTF-8.
Это работает, но не чисто:
<code>$xmlWriter->writeElement('test', utf8_decode($data)); </code>
Есть ли более чистое решение?
EDIT: показывая полный пример
<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>