2011-06-10 233 views
9

我知道如何通过cUrl获取html源代码,但是我想删除html文档中的注释(我的意思是<!-- .. -->之间的内容)。另外,如果我可以只取html文档的BODY。谢谢。从html源代码中删除评论

+0

你应该手动解析它们......我有我自己的JavaScript库,但我不知道你怎么能在PHP – metaforce 2011-06-10 11:24:44

+0

中实现它,这里没有cUrl选项? – Luis 2011-06-10 11:26:51

+0

我不这么认为... – metaforce 2011-06-10 11:34:08

回答

25

尝试PHP DOM*

$html = '<html><body><!--a comment--><div>some content</div></body></html>'; // put your cURL result here 

$dom = new DOMDocument; 
$dom->loadHtml($html); 

$xpath = new DOMXPath($dom); 
foreach ($xpath->query('//comment()') as $comment) { 
    $comment->parentNode->removeChild($comment); 
} 

$body = $xpath->query('//body')->item(0); 
$newHtml = $body instanceof DOMNode ? $dom->saveXml($body) : 'something failed'; 

var_dump($newHtml); 

输出

string(36) "<body><div>some content</div></body>" 
+0

看起来它运行良好,我从来没有听说过DOM。谢谢。 – Luis 2011-06-10 12:06:47

1

如果有在cUrl作者没有选择这个(我怀疑没有,但是我已经错了之前),那么你可以在最起码解析生成的HTML你的心脏的内容与PHPDOMparser

就配置性和支持而言,这可能是您长期以来最好的选择。

+0

正确,卷曲中没有这样的选项。它只是在服务器发送数据时获取数据。 – 2011-06-10 11:32:00

0

我会管它的sed的正则表达式,像

curl http://yoururl.com/test.html | sed -i "s/<!\-\-\s?\w+\s?\-\->//g" | sed "s/.?(<body>.?</body>).?/\1/" 

的正则表达式可能不准确,但你的想法...