【问题标题】:Remove HTML using PHP (ob_start + dom parser)使用 PHP (ob_start + dom 解析器) 删除 HTML
【发布时间】:2011-04-10 09:20:07
【问题描述】:

我需要学习如何使用 PHP 删除 html 标签。

这就是我的想法(我认为 DOM 短语是我需要的,但我不知道它是如何工作的。一个可行的示例对我有很大帮助。我无法安装任何外部库,我是运行 PHP 5):

function the_remove_function($remove){

//  dom parser code here?

return $remove;}

// return all content into a string
ob_start('the_remove_function');

示例代码:

<body>
<div class="a"></div>
<div id="b"><p class="c">Here are some text and HTML</p></div>
<div id="d"></div>
</body>

问题:

1) 我如何退货:

<body>
<p class="c">Here are some text and HTML</p>
</body>

2) 我如何退货:

<body>
<div class="a"></div>
<div id="b"></div>
<div id="d"></div>
</body>

3) 我如何退货:

<body>
<div class="a"></div>
<p class="c">Here are some text and HTML</p>
<div id="d"></div>
</body>

下一个示例代码:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel='stylesheet' id='test-css'  href='http://www.domain.com/css/test.css?ver=2011' type='text/css' media='all' />
<script type='text/javascript' src='http://www.domain.com/js/test.js?ver=2010123'></script>
</head>

4) 我该如何退货:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<link rel='stylesheet' id='test-css'  href='http://www.domain.com/css/test.css?ver=2011' type='text/css' media='all' />
</head>

5) 我如何退货:

<head>
<meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
<script type='text/javascript' src='http://www.domain.com/js/test.js?ver=2010123'></script>
</head>

感谢阅读:)

【问题讨论】:

  • 为什么不直接使用 strip_tags() 方法?
  • 感谢您的评论。你能举一个问题1的例子吗?
  • 看起来他有一些特殊情况要删除中间和东西
  • 抱歉,我没有注意到你有特定的部分。你需要 DOM 解析。但仅凭这一点是行不通的。因此,您必须解析所需的位(例如 P 标签)并以编程方式添加其余部分。
  • 我现在明白我必须做什么了。谢谢 JohanP。

标签: php html ob-start domparser


【解决方案1】:

试试HTML Purifier 库。它完全满足您的需求,并提供有关如何创建过滤器的大量文档。如果您出于安全原因想要进行过滤,那么一定要使用它——它有一个解析器,可以处理可以想象到的最疯狂的 XSS 方案。

【讨论】:

    【解决方案2】:

    您可以使用 PHP 的所有 DOM 类,您将在此处查看文档:http://fr2.php.net/manual/en/book.dom.php,我相信您可以找到很多您喜欢的教程。

    这是您的第二种情况的示例:

    <?php
    $content = '<body><div class="a"></div><div id="b"><p class="c">Here are some text and HTML</p></div><div id="d"></div></body>';
    $doc = new DOMDocument();
    $doc->loadXML($content);
    
    //Get your p element
    $p = $doc->getElementsByTagName('p')->item(0);
    //Remove the p tag from the DOM
    $p->parentNode->removeChild($p);
    
    //Save you new DOM tree
    $html = $doc->saveXML();
    
    echo $html;
    //If you want to delete the first line
    echo substr($html, strpos($html, "\n"));
    

    【讨论】:

    • 你想举个例子吗?我认为这很难学。
    • 我更新了我的帖子。如果您想了解更多关于 SO 的详细信息,还有很多其他示例。
    【解决方案3】:

    尝试使用:

    strip_tags();
    

    php 中的函数。

    示例用法

        <?php
        $str = '<body>
                <div class="a"></div>
                <div id="b"><p class="c">Here are some text and HTML</p></div>
                <div id="d"></div>
                </body>
               ';
        echo strip_tags($str);
        echo "\n";
        ?>
    

    它会返回:

    Here are some text and HTML 
    

        <?php
         $str = '<body>
                 <div class="a"></div>
                 <div id="b"><p class="c">Here are some text and HTML</p></div>
                 <div id="d"></div>
                 </body>
                ';
         echo strip_tags($str, '<body>');
         echo "\n";
        ?>
    

    这将允许 '&lt;body&gt;' 标签,并将删除另一个标签。 结果:

    <body>
    Here are some text and HTML
    </body>
    

    更多示例Php.Net

    【讨论】:

    • 不完全是我想要的。不过谢谢你的回答。
    猜你喜欢
    • 1970-01-01
    • 2018-08-18
    • 1970-01-01
    • 1970-01-01
    • 2015-08-25
    • 1970-01-01
    • 2020-07-16
    • 2011-05-18
    • 2012-08-24
    相关资源
    最近更新 更多