使用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>
来关闭外部标记。当外部标签动态变化时,这不是一个好主意。
有人有解决方案吗?
答案 0 :(得分:1)
除了Joshua的回答,如果你想以更简单的方式做到这一点,你可以使用简单的html dom库,可以在下面的链接中找到。只需浏览他们的文档。当您遇到现在的问题以及何时想要抓取网页内容时,这个库很多次都很方便。
答案 1 :(得分:0)
您要做的是使用正则表达式进行字符串匹配,以便在两个<br>
标记之前和之前的<br>
标记之后获取文本。请参阅以下内容:
答案 2 :(得分:0)
<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;
}
?>
答案 3 :(得分: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;
}