Php 从html源代码中删除注释

Php 从html源代码中删除注释,php,curl,Php,Curl,我知道如何通过cUrl获取html源代码,但我想删除html文档上的注释(我指的是介于之间的注释)。另外,如果我可以只取html文档的正文。谢谢。如果cUrl中没有这个选项(我怀疑没有,但我以前错了),那么您至少可以用一个简单的语法将生成的HTML解析为您的心意 从长远来看,这可能是您在可配置性和支持方面的最佳选择。我会将其输送到sed,以获得正则表达式,类似于 curl http://yoururl.com/test.html | sed -i "s/<!\-\-\s?\w+\s?\-\

我知道如何通过cUrl获取html源代码,但我想删除html文档上的注释(我指的是介于
之间的注释)。另外,如果我可以只取html文档的
正文
。谢谢。

如果cUrl中没有这个选项(我怀疑没有,但我以前错了),那么您至少可以用一个简单的语法将生成的HTML解析为您的心意


从长远来看,这可能是您在可配置性和支持方面的最佳选择。

我会将其输送到sed,以获得正则表达式,类似于

curl http://yoururl.com/test.html | sed -i "s/<!\-\-\s?\w+\s?\-\->//g" | sed "s/.?(<body>.?</body>).?/\1/"
curlhttp://yoururl.com/test.html |sed-i“s///g”| sed“s/(.?).?//\1/“
正则表达式可能不精确,但您会想到…

试试:

$html='some content';//把你的卷曲结果放在这里
$dom=新的DOMDocument;
$dom->loadHtml($html);
$xpath=newdomxpath($dom);
foreach($xpath->query('//comment()')作为$comment){
$comment->parentNode->removeChild($comment);
}
$body=$xpath->query('//body')->项(0);
$newHtml=$DOMNode的body实例$dom->saveXml($body):'something failed';
var_dump($newHtml);
输出

string(36) "<body><div>some content</div></body>"
string(36)“某些内容”

Regex为我解决了这个问题,如下所示:

function remove_html_comments($html = '') {
    return preg_replace('/<!--(.|\s)*?-->/', '', $html);
}
函数删除html注释($html=''){
返回preg_replace('/','$html);
}

我遇到了在foreach循环中修改DOMNodeList时出现的问题,该循环消失了。出于这个原因,我不会像公认的答案那样推荐一个
foreach
循环。相反,使用
for
循环,如下所示:

$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
for ($els = $xpath->query('//comment()'), $i = $els->length - 1; $i >= 0; $i--) {
    $els->item($i)->parentNode->removeChild($els->item($i));
}

您应该手动重新分析它们。。。我有自己的JavaScript库,但我不知道如何在PHPthere中实现这一点没有cUrl选项?正确,cUrl中没有这样的选项。它只是在服务器发送数据时获取数据。看,它工作得很好,我从来没有听说过DOM。谢谢。让多行原始HTML工作,而不是显示

对于换行符,将
saveXML()
更改为
saveHTML()
。要使结果包含
元素,请将
loadHTML($html)
更改为
loadHTML($html,LIBXML\u html\u NODEFDTD)
,并将
$newHtml
行更改为
$newHtml=$DOMNode的body实例$dom->saveHTML():“有东西失败了”
$dom = new DOMDocument();
$dom->loadHTML($html);
$xpath = new DOMXPath($dom);
for ($els = $xpath->query('//comment()'), $i = $els->length - 1; $i >= 0; $i--) {
    $els->item($i)->parentNode->removeChild($els->item($i));
}