【问题标题】:Using PHP, how do I remove HTML Text After/Before Certain Number of <br>使用 PHP,如何在一定数量的 <br> 之后/之前删除 HTML 文本
【发布时间】:2012-08-24 03:57:54
【问题描述】:

使用 PHP,如何删除放置在一定数量 &lt;br&gt; 标签之前/之后的 HTML 文本?

例如,我有这个,

<div>
    <div><img sec=""></div>
    <br>
    <h3>title</h3>
    <span>some text here</span>
    <br>
    Some text that I want to remove.
    <br>
    <br>
</div>

我想删除最后两个 &lt;br&gt; 标记之前的字符串。或者可以在第二个&lt;br&gt;之后说。

我用&lt;br&gt; 尝试了explode(),并用array_push() 省略了最后两个数组元素。但是,我必须添加 &lt;/div&gt; 来关闭外部标签。当外部标签动态变化时,这不是一个好主意。

有人对此有解决方案吗?

【问题讨论】:

    标签: php html-parsing domdocument html-manipulation


    【解决方案1】:

    除了 Joshua 的回答之外,如果您想以更简单的方式进行操作,您可以使用简单的 html dom 库,该库可以在下面的链接中找到。只需浏览他们的文档即可。当您遇到像现在这样的问题以及想要抓取网页内容时,这个库会派上用场。

    http://simplehtmldom.sourceforge.net/

    【讨论】:

      【解决方案2】:

      您要做的是使用正则表达式进行字符串匹配,以获取两个&lt;br&gt; 标记之前和前一个&lt;br&gt; 标记之后的文本。请参阅以下内容:

      http://www.regular-expressions.info/php.html

      【讨论】:

        【解决方案3】:

        好吧,这就是我所取得的成就。虽然这可能不是最有效的方法,但我会分享。我使用了 DOMinnerHTML() 引入了here 和 preg_split()。这将删除最后三个 &lt;br&gt; 标记之后的文本。

        <?php 
        $html = <<<STR
        <div>
            <div><img sec=""></div>
            <br>
            <h3>title</h3>
            <span>some text here</span>
            <br>
            Some text that I want to remove.
            <br>
            <br>
        </div>
        STR;
        
        $doc = new DOMDocument;
        $doc->loadHTML($html);
        $node = $doc->getElementsByTagName('div')->item(0);
        $innerHtml = DOMinnerHTML($node);
        $arrHtml = preg_split('/<br.*?\/?>/i', $innerHtml);     // devide the string into arrays by <br> or <br />
        array_splice($arrHtml, -3);     // remove the last three elements   
        $edited = implode(" ", $arrHtml);
        
        echo $edited;
        
        function DOMinnerHTML($element) 
        { 
            $innerHTML = ""; 
            $children = $element->childNodes; 
            foreach ($children as $child) 
            { 
                $tmp_dom = new DOMDocument(); 
                $tmp_dom->appendChild($tmp_dom->importNode($child, true)); 
                $innerHTML.=trim($tmp_dom->saveHTML()); 
            } 
            return $innerHTML; 
        } 
        ?> 
        

        【讨论】:

          【解决方案4】:

          我做了以下事情:

          function limitTag($str,$tag,$limit) {
            $array = explode($tag,$str);
            $newStr = '';
            $i=0;
            foreach ($array as $child){
              if ($i<=$limite){
                if ($i>0) $newStr .= $tag;
                $newStr .= $child;
                $i++;
              } else break;
            }
            return $newStr;
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2021-12-19
            • 1970-01-01
            • 1970-01-01
            • 2023-03-16
            • 2016-08-24
            • 1970-01-01
            • 1970-01-01
            • 2020-01-27
            相关资源
            最近更新 更多