2009-12-17 3 views
2

내 서버에서 XML 파일로 작업하는 PHP SimpleXML 방식을 사용하고 있습니다. 난 XML의 내용을 읽을 필요가있다. (나는 그것을 수정할 필요가 없다) 그래서 SimpleXML을 사용하기 쉽고 간단하다. 그러나 SimpleXML은 매우 이상한 문자가 있기 때문에 특정 XML 파일을 읽는 데 문제가 있습니다.xml 파일에서 잘못된 문자를 어떻게 제거합니까?

Warning: simplexml_load_file() [function.simplexml-load-file]: data/data.xml:348: parser error : PCDATA invalid Char value 3 in C:\xampp\htdocs\VMP\xintel\analyzer.php on line 54 

Warning: simplexml_load_file() [function.simplexml-load-file]: Jardin al fte. Hall de recepcion, amplio living comedor. ocina comedor diario c in C:\xampp\htdocs\VMP\xintel\analyzer.php on line 54 

나는 XML 파일에 어떤 일이 일어나는지의 여부를 제어 할 수 없습니다, 그래서 파일에 추가되는 이러한 문자를 멈출 수 없다 : 나는 다음과 같은 오류를 얻을. 또한이 문제를 해결하는 방법을 모르겠습니다. 파일은 utf-8로 인코딩되어야합니다. 그래서 UTF-8에서 ISO-8859-1 및 그 역으로 디코딩하는 등의 작업을 시도했지만 아무 일도 일어나지 않았습니다.

누군가 나를 도울 수 있습니까? 인코딩을 변경해야합니까? 그 캐릭터를 제거해야합니까? 아무것도?

편집 : stangre 문자가 모두 상자 그리기 문자입니다 (참조 : http://en.wikipedia.org/wiki/Box-drawing_characters를)

+2

감옥에 넣으십시오! : V – Sneakyness

+1

파일에 잘못된 XML 문자가 포함되어 있으면 XML 파일이 아니므로 XML 파서를 사용하면 도움이되지 않습니다. – skaffman

+0

음, 불법 문자가 xml 파서를 충돌시키는 것을 알 수 있습니다. – VinkoCM

답변

5

나는 나에게 인코딩되지 않은 앰퍼샌드를 보내 많은 것이 신뢰할 수없는 출처에서 XML을받는 응용 프로그램을 가지고있다. 이 문제를 해결하기 위해 필자는 단일 선형 패스를 수행하고 필요한 경우 문자를 제거/인코딩하는 중간 필터를 사용합니다. 나는 그것이 당신에게 가능한지 모르지만 그것은 꽤 합리적인 해결책이라고 생각합니다. 당신의 XML이 유효하지 그렇지 않은 경우 경우가 CDATA 섹션 =>link text

로하지 않는 한

+0

좋아요, 당신이하는 말을 이해합니다. 하지만 어떻게해야할지 모르겠습니다. 앱이 인코딩을 변경합니까 아니면 실제로 문제가있는 문자를 문자 인코딩으로 대체합니까? – VinkoCM

+0

미안하지만, 내가 "인코딩"이라고 말했을 때 나는 charset을 언급하지 않았다. 예를 들어, 원시 앰퍼샌드의 경우 &으로 바뀝니다.이 앰퍼샌드가 이미 유효한 인코딩의 일부가 아니 었는지 확인하거나 처리가 완료되면 디코딩 패스를 수행해야합니다. – danben

+0

나는 그것이 내가 할 것이라고 생각한다. 최선의 방법은 전체 xml 파일을 다시 인코딩하여 나중에 확인할 수없는 문자가 발생할 때 스크립트가 중단되지 않도록하는 것입니다. – VinkoCM

0

일반적으로 XML 파일의 모든 문자는 해석됩니다.

+2

문제는 사용자가 제어 할 수없는 잘못된 XML 파일을 처리하는 방법입니다. – ceejayoz

+0

xml의 모든 텍스트가 CDATA 블록에 놓여 있는지 확실히 말할 수 있습니다. 그래서이 모든 문자들은 CDATA 내에서 발견됩니다. – VinkoCM

+0

샘플 XML 파일이 있습니까? – Patrick

2

Tidy을 통해 입력을 전달하여 올바른 형식으로 만들 수 있습니다. 파일을 SimpleXML에 보내기 전에 사전 처리의 한 가지 간단한 단계.

예를 들어 tidy::repairFile이 유망 해 보입니다.

관련 문제