2011-02-10 2 views
1

다른 소스에서 다른 XML 파일을받는이 프로젝트에서 작업 중입니다. 내 PHP 스크립트는 그것들을 읽고, 구문 분석하고, mysql 데이터베이스에 저장해야한다.PHP : 간단한 XML과 다른 코드 페이지 및 데이터 가져 오기

XML 파일을 구문 분석하려면 PHP에서 SimpleXMLElement 클래스를 사용합니다. 벨기에에서 UTF-8 인코딩, 독일에서 iso-8859-1 인코딩, 체코에서 cp1250 등의 파일을받습니다.

XML 데이터를 SimpleXMLElement에 전달하고 이 객체에 asXML()을 사용하면 XML 데이터가 원래의 xml 파일과 동일하게 올바르게 표시됩니다. 필드를 PHP 변수에 할당하고이 변수를 화면에 인쇄하려고하면 텍스트가 손상된 것처럼 보이며 mysql 데이터베이스에 삽입 할 때 물론 손상됩니다.

예 :

는 XML :

<?xml version="1.0" encoding="cp1250"?> 
... 
<name>Labe Dìèín - Rozb 741,85km ; Dìèín - Rozb 741,85km </name> 
... 

PHP 코드 (리눅스 배시 셸) 코드

$sxml = file_get_contents("test.xml"); 
$xml = new SimpleXMLElement($sxml); 
//echo $xml->asXML() . "\n"; // content will show up correctly in the shell 
$name = (string)$xml->ftm->fairway_section->geo_object->name; 
echo $name . "\n"; 

결과 위쪽 후 인쇄물을 커서 이동 : BAN - Rozb 741,85km; DÄ (커서 움직임은 물론 PHP에서 인쇄 된 잘못된 문자와 관련이 있습니다)

PHP는 데이터를 UTF-8로 변환하여 문자열 매개 변수에 저장하므로 mb_convert_encoding을 사용하는 것으로 가정합니다. UTF-8에서 cp1250으로 변환하면 올바른 결과가 표시되지만 그렇지 않습니다. 또한 다른 모든 소스와 결합 할 수있는 형식으로 데이터를 저장할 수 있어야합니다.

인코딩/코드 페이지에 대해 많이 알지 못합니다. 아마도이 코드가 제대로 작동하지 않을 수 있습니다.하지만 내가 알고있는 것은 다른 언어의 텍스트를 복사/붙여 넣기하면 새로운 UltraEdit 파일은 모두 올바르게 표시됩니다. UltraEdit은 이것을 어떻게 처리합니까? 그것은 UTF-8을 사용합니까? (아무것도 표시 할 수 있습니까?)

데이터를 변환하여 소스의 인코딩과 상관없이 항상 표시되도록하려면 어떻게해야합니까? 대신

답변

2

시도 iconv :

$str = iconv('UTF-8', 'WINDOWS-1250', $str); 
+0

네,이 트릭을 않습니다. 그 차이점은 무엇입니까? – scippie

0

문제는 사용자의 입력 파일 형식이 잘못입니다. Windows-1250에는 문자 ì (라틴 소문자 I, 무덤 포함)이 없습니다. here을 참조하십시오.

가장 가까운 문자는 U+00ED (라틴어 소문자 I WITH ACUTE)입니다.

이러한 문자가 셸에서 올바르게 표시된다는 사실은 우연 일 수 있습니다.

관련 문제