【问题标题】:Remove javascript codes in parsing a webpage在解析网页时删除 javascript 代码
【发布时间】:2011-11-09 10:18:36
【问题描述】:

当通过CURLfile_get_contents 捕获网页内容时,删除内联 javascrip 代码的最简单方法是什么。我正在考虑使用正则表达式来删除标签之间的所有内容;但正则表达式不是用于此目的的可靠方法。

是否有更好的方法来解析 html 页面(仅删除 javascript 代码)?如果 regex 仍然是最佳选择,那么最可靠的命令是什么?

【问题讨论】:

    标签: php html regex parsing html-parsing


    【解决方案1】:

    您可以使用DOMDocument 及其removeChild() 功能。像下面这样的东西应该能让你继续前进。

    <?php
    
    $doc = new DOMDocument;
    $doc->load('index.html');
    
    $page = $doc->documentElement;
    
    // we retrieve the chapter and remove it from the book
    $scripts = $page->getElementsByTagName('script');
    foreach($scripts as $script) {
       $page->removeChild($script);
    }
    
    echo $doc->saveHTML();
    ?>
    

    【讨论】:

    • 我避免使用 DOM,因为它比正则表达式慢,而且我不需要很多解析函数。但是,对于微小的解析,它似乎也非常可靠(然后需要)!
    • 更快更不可靠,还是更慢更可靠?永恒的问题。
    • 这不仅仅是为了可靠性而牺牲速度的问题。 DOMDocument 不会简单地解析任何 html 页面,而且大多数时候它只是返回一堆错误。例如,将当前页面的html代码保存为index.html,运行上述代码。它会返回很多“DOMDocument::load(): Opening and end tag mismatch”的错误...
    • 这个解决方案不会错过标签属性javascript吗?例如,
    • @peabody 是的,它只回答了 OP 的要求。如果您想要这样做,您需要添加代码来查找和删除相关属性:php.net/manual/en/domelement.removeattribute.php
    猜你喜欢
    • 2010-10-09
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2010-10-17
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多