2012-03-28 2 views
1

왼쪽 및 오른쪽 따옴표가 포함 된 UTF-8로 인코딩 된 HTML 텍스트를 구문 분석하려고합니다. 하지만 saveHTML()을 사용하여 DOM에서 html 값을 다시 가져 오려고하면 따옴표는 항상 엉망이됩니다.DOM xpath 따옴표가 깨져

이제는 DOM에 넣기 전에 utf8_encoding을 포함한 여러 가지 방법을 시도해 보았습니다. ('1.0', 'UTF-8')을 생성자에 넣으려고 시도했지만 작동하지 않았습니다.

나는이를 해결하는 방법이 부족합니다. 따옴표를 HTML 엔티티로 변환하는 것은 나를위한 옵션이 아닙니다.

$a = "<html><body><div>won’t you, will you, won’t you, join the </div></body></html>"; 
$dom = new DOMDocument(); 

$dom->loadHTML($a); 

$xpath = new DOMXPath($dom); 

$tag = $xpath->query('//div'); 

foreach($tag as $t) 
    echo $dom->saveHTML($t); 

반환 된 텍스트는 다음과 같습니다 : 여기

는 인용 부호를 나누기 간단한 예를 들어 당신이, wonât 당신이, 당신은 wonât 당신이 가입 할 것

+0

문자열이 어떤 문자셋인지 알고 있습니까? 나는 그것이 utf8이 아니란 걸 확신한다. –

+0

utf8이다. 그러나 나는 그 질문에서 말했다. 문자열에 utf8_encode를 사용하고 dom에 전달하면 같은 결과를 얻습니다. –

답변

1

좋아, 당신이 loadHTML를 사용하여 주장하는 경우 다음이 시도 그것은 작동 할 것입니다

마지막으로, 당신은 당신이 이것을 시도 할 수있는 여분의 메타 태그를 추가 할 수 없습니다 : use $ dom-> loadHTML (utf8_decode ($ a)); latin-1 charset의 dom에로드 된 utf8에서 문자열을 먼저 latin-1로 변환하고 latin-1도 출력됩니다.

+0

대단히 감사합니다! –

1

이 솔루션에 보인다 loadHTML() 대신 $ dom-> loadXML ($ a)를 사용하십시오. 나는 그것을 시도했고 그것은 나를 위해 일했습니다.

$a = "<html> 
    <meta http-equiv=\"Content-Type\" content=\"text/html; charset=utf-8\"> 
<body><div>won’t you, will you, won’t you, join the </div></body></html>"; 

이 그럼 당신은 loadHTML을 사용할 수 있습니다 ($ a)와 :

는 다음과 같이 먼저 HTML로 적절한 메타 태그를 추가 :

+1

이유는 loadXML은 charset이 주어지지 않는 한 loadHTML은 항상 latin-1을 기본 charset으로 사용하지만 utf-8은 항상 사용한다는 것입니다. HTML 마크 업의 메타 태그 –

+0

흠 ... loadHML을 loadXML로 변경하면 다음과 같이 따옴표의 xml 엔터티가 포함 된 문자열이 반환됩니다. "아프다. â € ™, 그것은 나를 위해 doens't –