2012-04-16 5 views
2

이 간단한 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(); 
+0

$ 데이터의 출처를 표시해주세요. (포함 된 쿼리) – Manuel

답변

6

잘 모르겠어요. 그렇지 않습니다. 이어야하며 utf-8로 공급해야합니다. 다른 인코딩을 출력 할 수 있지만 입력 문자열은 utf-8이어야합니다. 두 가지의

하나는 여기에 갈 수 있습니다 : 당신이 사용하는 무엇이든

  1. 보기 하는 출력 문서가 윈 - 1252와 같은 문자열을 해석한다. 브라우저에서 결과를보고있는 경우 다음과 같이 content-type 헤더를 설정해야 할 수 있습니다. header('Content-Type: application/xml; charset=UTF-8');
  2. 데이터를 데이터베이스에 잘못 저장했으며 "é"는 실제로 두 개의 유니 코드 문자 "Ã ©" . 이 문제를 해결하는 것은 어렵습니다.