2012-03-24 4 views
3

이 나는 ​​HTML 파서를 만들려고 노력하고있어,하지만 때 내가 얻을 HTML을로드이CDATA 태그를 무시하는 방법?

경고와 같은 경고 : DOMDocument를 :: loadHTML() [domdocument.loadhtml] : 엔티티에 CDATA가 0x1c에 잘못된 문자, 라인 : 1302

여기에 내가 주변 검색과 LIBXML_NOCDATA 상수 발견

class Parser 
{ 
public $url=null; 
public $html=null; 
public $tidy=null; 
public $head=null; 
public $head_xpath=null; 


function __construct($url){ 
    $this->url=$url; 
    $this->html=file_get_contents($this->url); 
    $this->tidy=tidy_parse_string($this->html); 
    $this->head=new DOMDocument(); 
    $this->head->loadHTML($this->tidy->head()); 
    $this->head_xpath= new DOMXPath($this->head); 

} 
} 

$x=new Parser("http://www.guardian.co.uk/politics/2012/mar/24/vince-cable-coalition-banking-row"); 

를 사용하는 코드입니다,하지만 난 그것을 설정하는 방법을 모르겠어요. 그래서 어떻게 CDATA를 완전히 무시할 수 있습니까?

+0

그리고 나는 맹목적으로 내용을 바꾸는 것이 그것이 어떤 기사에있을 수도 있기 때문에 옵션이 아니라고 생각합니까? –

+0

@Artjom Kurapov 나는 cdata 태그를 str_replace로 대체하려고 시도했지만 여전히 경고를 주었고 어떤 사람들은 (공백이 많은) nope

+0

xml에서 문제가되는 행을 게시 할 수 있습니까? 그것이 잘 형성된 cdata이라면 그 오류를 던져서는 안됩니다. 문자 인코딩 문제가있는 것 같습니다. –

답변

0
$this->html = preg_replace('~//\s*?<!\[CDATA\[\s*|\s*//\]\]>~', '', $this->html); 

은 작동해야하지만 실제로 테스트하지 않아야합니다.

관련 문제