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>