【问题标题】:How to get PHP DOM getElementsByTagName('body') with html tags如何使用 html 标签获取 PHP DOM getElementsByTagName('body')
【发布时间】:2015-10-06 06:24:40
【问题描述】:

我正在获取正文内容,但正文中没有 html 标签(已清理)。我需要正文中的所有 html 标签。我想对我的代码进行哪些更改?

$doc = new DOMDocument();
@$doc->loadHTMLFile($myURL);

$elements2 = $doc->getElementsByTagName('body');

        foreach ($elements2 as $el2) {
            echo $el2->nodeValue, PHP_EOL;
        echo "<br/>";
}   

【问题讨论】:

  • 您输出 HTML 并由您的浏览器解释。使用 htmlentities() 或设置 MIME 类型 (header('Content-Type: text/plain')) 或在浏览器中查看原始源代码。
  • @ComFeek 你这样说 echo htmlentities($el2->nodeValue, PHP_EOL); ,它不工作,它抛出一个错误
  • @Wazan 不,你用错了,试试这个:htmlentities($el2-&gt;nodeValue, ENT_HTML5), PHP_EOL;
  • 当我这样使用时会生成不需要的关键字,例如 &NewLine;&comma; .但没有得到这些标签 h,p,br,div。我想全部生成。

标签: php html dom


【解决方案1】:

您需要将body 子节点保存为 HTML。我建议使用 Xpath 来获取节点,这样可以避免外循环:

$html = <<<'HTML'
<html>
  <body>
    Foo
    <p>Bar</p>
  </body>
</html>
HTML;

$document = new DOMDocument();
$document->loadHtml($html);
$xpath = new DOMXpath($document);

$result = '';
foreach ($xpath->evaluate('//body/node()') as $node) {
  $result .= $document->saveHtml($node);
}
var_dump($result);

输出:

string(29) "
    Foo
    <p>Bar</p>
  "

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-09-11
    • 2011-10-07
    • 1970-01-01
    • 1970-01-01
    • 2015-11-02
    相关资源
    最近更新 更多