使用PHP删除基于ID的HTML标记及其内容[关闭]

问题描述 投票:-3回答:1
    我想根据id / class的html元素从HTML文件中删除一些HTML标记及其内容。
  • 标签本身没有关系。
  • 这是我的PHP代码:

    $homepage = file_get_contents("assets/page.html"); $removeTagsbyID = ['button' , 'navbar']; foreach ($removeTagsbyID as $removeTagbyID) { $pattern = "#<(.*?)$removeTagbyID(.*?)>#is"; $homepage = preg_replace($pattern, '', $homepage); }

    例如,如果我的数组包含id“ navbar”,

    <div id="top-bar"><div id="navbar">Content</div></div>

    它应该给:

    <div id="top-bar"></div>

  • php preg-replace
    1个回答
    1
    投票
    您应该使用内置的PHP DOMDocumentDOMDocument对象来解析和处理HTML:

    DOMXPath

    输出

    DOMXPath

    function removeTagsByID($html, $ids) {
        $doc = new DOMDocument();
        $doc->loadHTML($html, LIBXML_HTML_NOIMPLIED | LIBXML_HTML_NODEFDTD);
        $xpath = new DOMXPath($doc);
        // find element with specified ID values
        foreach ($ids as $id) {
            $tags = $xpath->query("//*[@id='$id']");
            // and remove them
            foreach ($tags as $tag) {
                $tag->parentNode->removeChild($tag);
            }
        }
        return $doc->saveHTML();
    }
    
    $html = '<div id="top-bar"><div id="navbar">Content</div></div>';
    echo removeTagsByID($html, ['button' , 'navbar']);
    
    © www.soinside.com 2019 - 2024. All rights reserved.