이 간단한 PHP 코드를 가지고 :인코딩 문제
$xmlWriter = new XMLWriter();
$xmlWriter->openURI('php://output');
$xmlWriter->startDocument('1.0', 'utf-8');
$xmlWriter->writeElement('test', $data);
$xmlWriter->endDocument();
$xmlWriter->flush();
XMLWriter가 클래스는 좋은 기능이 있습니다 : 그것은 당신이 출력 인코딩에에게 줄 데이터를 변환합니다. 예를 들어 $data
을 을 startDocument
함수로 전달했기 때문에 여기서는 UTF-8로 변환합니다.
내 경우에는 $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));
는 청소기 솔루션이 있습니까?
편집 : 당신이 XMLWriter
이 인코딩을 변환하는 생각이있어 어디 전체 예를 도시는
$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