2012-03-24 5 views
3

Ich versuche, einen HTML-Parser zu machen, aber wenn ich den html Ich mag dieseWie ignoriert man CDATA-Tags?

Warnung Warnungen erhalten laden: DOMDocument :: loadhtml() [domdocument.loadhtml]: in CDATA 0x1C in Entity Ungültige Zeichen, Zeile : 1302

Hier ist der Code verwende ich

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"); 

ich um suchte und fand die LIBXML_NOCDATA konstant, aber ich weiß nicht, wie es zu setzen. Also, wie könnte ich CDATA vollständig ignorieren?

+0

Und ich denke, Blind ersetzen im Inhalt ist keine Option, weil es in einem Artikel sein könnte? –

+0

@Artjom Kurapov Ich habe versucht, die cdata-Tags durch str_replace zu ersetzen, aber es gibt immer noch Warnungen und ich kann nicht immer sicher sein, dass ich sie entfernt habe, weil manche Leute sie wie // (mit vielen Leerzeichen) schreiben nope

+0

Können Sie die fehlerhafte Zeile aus der XML-Datei veröffentlichen? Wenn es gut formatierte CData ist, sollte es diesen Fehler nicht werfen. Sieht so aus, als ob Sie möglicherweise ein Problem mit der Zeichencodierung haben. –

Antwort

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

sollte funktionieren, aber nicht wirklich getestet haben.