2012-03-17 3 views
2

PHP에서 SimpleXML로 구문 분석하는 XML 파일이 있습니다. 내가 할 경우 첫 번째 줄은 $xml에 저장됩니다PHP에서 XML 문서 구문 분석하기

<?xml version="1.0" encoding="iso-8859-1"?> 

해석의 결과 : 전체 파일이 표시 완벽하게 다음

echo $xml->asXML(); 

. 다음은의이 발생하는 곳이며, XML 요소의 일부 내부

echo $xml->Chapter->asXML(); 

MathML을 (<math>)이있다 : 어쨌든있는 구조로 파고 경우

는, 나는 예를 들어 A의 everwhere를 얻을. 예를 들어 문자 이 Â로 바뀝니다.

XML 파일을 구문 분석 할 수 있지만 MathML 문자가 손실되지 않도록하려면 어떻게해야합니까?

+1

∈은 ISO 8859-1에서 표현할 수있는 문자가 아니므로 XML을 변경하여 UTF-8로 인코딩되었음을 나타냅니다. . 또한 PHP에 출력이 UTF-8임을 알려줄 필요가 있습니다. – salathe

+0

하지만 브라우저에서 xml 파일 자체를 볼 경우 잘 나타 났으며, 위에서 말했듯이 구조에 파고 들자마자 나타납니다. –

+0

그러면 PHP는 이미 UTF-8로 출력하고 있습니다. XML에서'encoding = "..."'을 변경해야합니다. – salathe

답변

2

∈는 char이 아닙니다. 액터가 ISO 8859-1로 표현 될 수 있다면, XML이 UTF-8로 인코딩되었다고 바꾸십시오.

문제를 보여주는 예제를 제공하십시오.

$x = simplexml_load_string('<?xml version="1.0" encoding="iso-8859-1"?> 
<example><math>∈</math></example>'); 
echo $x->math, PHP_EOL; 

$x = simplexml_load_string('<?xml version="1.0" encoding="utf-8"?> 
<example><math>∈</math></example>'); 
echo $x->math, PHP_EOL; 

출력 내용은 (UTF-8로) 다음과 같습니다.

â 
∈ 

SimpleXML을은 encoding는 다른 무언가로 설정되어있는 경우 UTF-8로 변환하려고합니다. 입력이 이미 UTF-8로 인코딩되고 encoding 선언이 올바르지 않은 경우 수행 할 작업을 제공하지 않는 것이 좋습니다.


또한 PHP 자체가 UTF-8을 출력하고 있는지, 브라우저에이 사실을 알리는 지 확인하십시오.

당신은 (php.ini 파일 또는 ini_set() 사용) default_charset INI 옵션을 설정하거나 올바른 Content-Type 헤더 (header('Content-Type: text/html; charset=utf-8'))를 전송하여이 작업을 수행 할 수 있습니다.

-1

SimpleXML로 구문 분석하기 전에 입력을 다른 인코딩으로 변환해야 할 수 있습니다. 텍스트

    1. 읽기 파일의 내용은, SimpleXML을 서로 다른 인코딩으로
    2. 구문 분석을 변환하고 필요한 경우
    3. 는, 원래의 인코딩
    4. 이 들어

    출력을 변환 원하는대로 할 함수 iconv()는 매우 유용합니다 : http://php.net/manual/en/function.iconv.php

  • 0

    문제는 인코딩이 아닙니다. 모든 브라우저가 script이 브라우저에 울리는 MathML을 지원하지는 않습니다.

    http://en.wikipedia.org/wiki/MathML#Web_browsers

    는 다음 브라우저에서이 테스트 :

    • 사파리 5.1.2 -
    • 크롬 17.0.9x 실패 - 부분적
    • 파이어 폭스 3.6.28은 -
    작동
    +0

    MathML은 Safari 5.1.4에서 작동하므로 별 문제가되지 않습니다. –

    +0

    나는 정중하게 의견이 맞지 않는다. 다른 브라우저에서 스크립트를 열면 각 스크립트의 출력이 다르게 렌더링됩니다. –

    +0

    예, 각 브라우저마다 다르지만 Safari 5.1.4 (및 Firefox) 에서처럼 XML 파일을로드하면 MathML이 예상대로 (Â없이) 표시됩니다. 그래서 이것은 문제가 아닙니다. –

    관련 문제