は、この単純なPHPコードを取る:エンコーディングの問題
$xmlWriter = new XMLWriter();
$xmlWriter->openURI('php://output');
$xmlWriter->startDocument('1.0', 'utf-8');
$xmlWriter->writeElement('test', $data);
$xmlWriter->endDocument();
$xmlWriter->flush();
のXmlWriterクラスは、便利な機能を持っている:それはあなたが出力エンコーディングにに与える任意のデータを変換します。たとえば、ここでは$data
をUTF-8に変換します。これは、をstartDocument
関数に渡したためです。
問題は、私の場合には$data
の内容は、その出力形式UTF-8とであるUTF-8にしたがって、すでにあるデータベースから来ているということです。 XMLWriter は、おそらくデータがISO-8859-1であると考えて、UTF-8に変換し直します。アクセントを得るべき奇妙なシンボルがあります。
現在、データベースからの各文字列の周りにutf8_decode
を使用しています。つまり、UTF-8からISO-8859-1に変換してから、XMLWriterを使用してUTF-8に戻します。
これは動作しますが、きれいではありません。
$xmlWriter->writeElement('test', utf8_decode($data));
クリーナー解決策はありますか?
EDIT:
$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();
$データはどこから来ていますか? (クエリを含む) – Manuel