0

使用 PHP,如何删除放置在一定数量<br>标签之前/之后的 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>

我想删除最后两个<br>标签之前的字符串。或者可以说是在第二个之后<br>

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

有人对此有解决方案吗?

4

4 回答 4

1

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

http://simplehtmldom.sourceforge.net/

于 2012-08-24T04:11:16.523 回答
0

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

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

于 2012-08-24T04:04:06.100 回答
0

好的,这就是我所取得的成就。虽然这可能不是最有效的方法,但我会分享。我使用了这里介绍的 DOMinnerHTML()和 preg_split()。这将删除最后三个<br>标签之后的文本。

<?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; 
} 
?> 
于 2012-08-25T04:32:42.043 回答
0

我做了以下事情:

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;
}
于 2018-11-19T16:26:41.603 回答