亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

使用 DOM 文檔將多個 HTML 正文另存為一個

使用 DOM 文檔將多個 HTML 正文另存為一個

PHP
料青山看我應如是 2022-09-17 15:29:52
我有一個包含多個標簽的字符串。我想獲取所有內容并將它們連接到一個有效的結構。例如:<html><body><div>Content</div></body></html><html><body><div>Content</div></body></html><html><body><div>Content</div></body></html><html><body><div>Content</div></body></html>應該是:<html>    <body>        <div>Content</div>        <div>Content</div>        <div>Content</div>    </body></html>我當前的代碼如下所示:    libxml_use_internal_errors(true);    $newDom = new DOMDocument();    $newBody = "";    $newDom->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'));    $bodyTags = $newDom->getElementsByTagName("body");    foreach($bodyTags as $body) {        $newBody .= $newDom->saveHTML($body);    }$newBody現在包含所有正文標簽:<body><div>Content</div></body><body><div>Content</div></body><body><div>Content</div></body>如何只保存每個正文標簽的HTML內容?$newBody編輯:基于@NigelRen的答案,這是我的解決方案:    libxml_use_internal_errors(true);    $newDom = new DOMDocument();    $newBody = '';    $newDom->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'));    $bodyTags = $newDom->getElementsByTagName("body");    foreach($bodyTags as $body) {        foreach ($body->childNodes as $node)   {            $newBody .= $newDom->saveHTML($node);        }    }    $newDom = new DOMDocument();    $newDom->loadHTML(mb_convert_encoding($newBody, 'HTML-ENTITIES', 'UTF-8'));    $newBody = $newDom->saveHTML();
查看完整描述

1 回答

?
ABOUTYOU

TA貢獻1812條經驗 獲得超5個贊

這很尷尬,因為當您使用它時,它將嘗試修復原始文檔中的HTML。這創建了一個結構,它不是你所認為的。loadHTML()


但是,如果您有文檔的基本大綱,則以下內容會將標記的內容復制到新文檔(代碼中的注釋)...<body>


$html = '<html><body><div>Content1</div></body></html>

<html><body><div>Content2</div></body></html>

<html><body><div>Content3</div></body></html>';


libxml_use_internal_errors(true);

$newDom = new DOMDocument();


// New document with final code

$newBody = new DOMDocument();


$newDom->loadHTML(mb_convert_encoding($html, 'HTML-ENTITIES', 'UTF-8'));


// Set up basic template for new doucument

$newBody->loadHTML("<html><body /></html>");

// Find where to add any new content

$addBody = $newBody->getElementsByTagName("body")[0];

// Find the existing content to add

$bodyTags = $newDom->getElementsByTagName("body");

foreach($bodyTags as $body) {

    // Add all of the contents of the <body> tag into the new document

    foreach ( $body->childNodes as $node )   {

        // Import the node to copy to the new document and add it in

        $addBody->appendChild($newBody->importNode($node, true));

    }

}

echo $newBody->saveHTML();

這給了...


<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">

<html><body><div>Content1</div><div>Content2</div><div>Content3</div></body></html>

限制是不會保留標記之外的任何內容和標記的任何屬性。<body><body>


查看完整回答
反對 回復 2022-09-17
  • 1 回答
  • 0 關注
  • 142 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號