DOM 去除 script 标签不干净

去圣西罗-为尤文喝彩 2012-11-18 02:36:01
$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的代码被打印了出来,究竟是什么原因?如何解决?大家帮忙一下。
...全文
220 3 打赏 收藏 转发到动态 举报
写回复
用AI写文章
3 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2012-11-18
  • 打赏
  • 举报
回复
js 中的 html 标记串造成了 DOM 解析错误 虽然是 loadHTML,但也只是不严格检查标记的封闭性,并不会去做 js 的语法检查
  • 打赏
  • 举报
回复
ok, 先去掉 //comment() ,然后再script。
ImN1 2012-11-18
  • 打赏
  • 举报
回复
关键是html并不是很严谨的标签语法——为什么这么糟糕?这恰恰html5复辟,推倒xhtml的理由 有兴趣去查查html5的产生历史(html4是w3c产物,html5是w3c被迫接受的产物) 最好能确定或者转化为严格的标签再做dom 转化用tidy是一个好的选择,但本人测试也有出错严重的情况(估计你的例子tidy也处理得不好,但可以试试) 试用过多个DOM方式解析html的相关项目产品,暂时容错性最好的是simple html dom

21,886

社区成员

发帖
与我相关
我的任务
社区描述
从PHP安装配置,PHP入门,PHP基础到PHP应用
社区管理员
  • 基础编程社区
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧