2012-03-24 144 views
3

我试图让一个HTML解析器,但是当我加载HTML我得到这样如何忽略CDATA标签?

警告警告:DOM文档:: loadHTML()[domdocument.loadhtml]:在CDATA为0x1C无效字符的实体,线:1302

这里是我的代码使用

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

我周围搜查,发现LIBXML_NOCDATA恒定的,但我不知道如何设置它。 那么我怎么能完全忽略CDATA?

+0

而且我猜想在内容中盲目取代它不是一种选择,因为它可能在某些文章中? – 2012-03-24 20:01:38

+0

@Artjom Kurapov我试着用str_replace替换cdata标签,但它仍然给出警告,我不能确定我删除了它们,因为有些人把它们写成//(在这里有很多空格)<![cdata [。 – nope 2012-03-24 20:06:44

+0

你可以发布xml中的违规行吗?如果它是格式良好的cdata,它不应该抛出该错误。看起来你可能有一个字符编码问题。 – 2012-03-24 20:32:12

回答

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

应该可以工作,但还没有真正测试过它。