【问题标题】:How to use PHP's DOM extension loadHTML如何使用 PHP 的 DOM 扩展 loadHTML
【发布时间】:2010-12-16 10:26:56
【问题描述】:

有人建议我为了关闭一些“悬空”的 HTML 标签,我应该使用 PHP 的 DOM 扩展和 loadHTML。

我已经尝试了一段时间,搜索教程,阅读this page,尝试了各种东西,但似乎无法弄清楚如何使用它来完成我想要的。

我有这个字符串:<div><p>The quick brown <a href="">fox jumps...

我需要编写一个函数来关闭打开的 HTML 标签。

只是在这里寻找一个起点。我通常可以很快解决问题。

【问题讨论】:

    标签: php


    【解决方案1】:

    可以使用DOMDocument::loadHTML() 和DOMDocument::normalizeDocument() 方法在PHP 中使用DOMDocument 类来完成。

    <?php
        $html = '<div><p>The quick brown <a href="">fox jumps';
    
        $DDoc = new DOMDocument();
        $DDoc->loadHTML($html);
        $DDoc->normalizeDocument();
    
        echo $DDoc->saveHTML();
    ?>
    

    输出:

    <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd"> 
    <html><body><div><p>The quick brown <a href="">fox jumps</a></p></div></body></html> 
    

    从那里,只需 substrstrpos 去掉你不想要的 html,就像这样:

    <?php
        $html = '<div><p>The quick brown <a href="">fox jumps';
    
        $DDoc = new DOMDocument();
        $DDoc->loadHTML($html);
        $DDoc->normalizeDocument();
    
        $html = $DDoc->saveHTML();
    
        # Remove Everything Before & Including The Opening HTML & Body Tags.
        $html = substr($html, strpos($html, '<html><body>') + 12);
        # Remove Everything After & Including The Closing HTML & Body Tags.
        $html = substr($html, 0, -14);
    
        echo $html;
    ?>
    

    【讨论】:

    • 整洁对我来说不是一个选择,但希望有人会发现这些信息有用。稍后将尝试 DOM 部分。谢谢!
    • 我们如何为 XHTML 做到这一点?
    • 我认为您需要做的就是将 DocType 更改为任何 xhtml dtd。祝你好运。
    【解决方案2】:

    虽然我确信您可以让 DOM 做您想做的事,但我很确定您最好使用 Tidy

    【讨论】:

    【解决方案3】:
    【解决方案4】:

    我认为您采用了错误的方法:您必须使用 DOM 东西来截断字符串,而不是在截断它之后。

    我会这样做:

    1. 找到要截断字符串的地方
    2. 删除该点之后的所有子节点
    3. 截断字符串

    【讨论】:

      猜你喜欢
      • 2014-04-24
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2018-06-13
      • 2017-10-18
      • 2015-06-10
      • 2011-09-06
      • 2020-12-25
      相关资源
      最近更新 更多