$ch = curl_init();
curl_setopt($ch, CURLOPT_URL, "http://qn.quotidiano.net/ultimora.php?news=135315570352&a=2012&m=11&g=17");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$htmls = curl_exec($ch);
curl_close($webch);
$htmls = utf8_encode(mb_convert_encoding($htmls, 'auto', 'UTF-8'));
//自动转换成utf8格式
libxml_use_internal_errors(true);
//去除dom保错
$dom = new DOMDocument('1.0', 'utf-8');
//声明DOM为utf8格式
@$dom->loadHTML($htmls);
$script_tags = $dom->getElementsByTagName('script');
$length = $script_tags->length;
for ($i = 0; $i < $length; $i++) {
$script_tags->item(0)->parentNode->removeChild($script_tags->item(0));
}
//查找script标签并去除
$dom->formatOutput = true;
$htmls = $dom->saveHTML();
//保存dom
echo $htmls;一个奇怪的问题,用DOM分析HTML源码,去除script标签,居然出现错误,很多GOOGLE ADS的代码被打印了出来,究竟是什么原因?如何解决?大家帮忙一下。
curl_setopt($ch, CURLOPT_URL, "http://qn.quotidiano.net/ultimora.php?news=135315570352&a=2012&m=11&g=17");
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
$htmls = curl_exec($ch);
curl_close($webch);
$htmls = utf8_encode(mb_convert_encoding($htmls, 'auto', 'UTF-8'));
//自动转换成utf8格式
libxml_use_internal_errors(true);
//去除dom保错
$dom = new DOMDocument('1.0', 'utf-8');
//声明DOM为utf8格式
@$dom->loadHTML($htmls);
$script_tags = $dom->getElementsByTagName('script');
$length = $script_tags->length;
for ($i = 0; $i < $length; $i++) {
$script_tags->item(0)->parentNode->removeChild($script_tags->item(0));
}
//查找script标签并去除
$dom->formatOutput = true;
$htmls = $dom->saveHTML();
//保存dom
echo $htmls;一个奇怪的问题,用DOM分析HTML源码,去除script标签,居然出现错误,很多GOOGLE ADS的代码被打印了出来,究竟是什么原因?如何解决?大家帮忙一下。
虽然是 loadHTML,但也只是不严格检查标记的封闭性,并不会去做 js 的语法检查
有兴趣去查查html5的产生历史(html4是w3c产物,html5是w3c被迫接受的产物)
最好能确定或者转化为严格的标签再做dom
转化用tidy是一个好的选择,但本人测试也有出错严重的情况(估计你的例子tidy也处理得不好,但可以试试)
试用过多个DOM方式解析html的相关项目产品,暂时容错性最好的是simple html dom