我有一个像这样的字符串,但每种情况下的链接数量可能不同:
<a>link 1</a> >> <a>link 2</a> >> <a>link 3</a> >> <a>link 4</a>
我想删除该字符串中的最后一个链接并像这样进行转换:
<a>link 1</a> >> <a>link 2</a> >> <a>link 3</a> >> link 4
有一个简单的函数吗?我知道我可以使用几个函数,如 preg_match、preg_match_all、explode 等...使用这些函数,删除第一个链接标签非常容易,尽管删除最后一个链接标签有点令人困惑。
感谢您的帮助。
最佳答案
使用 DOM 解析器,例如 DOMDocument .
$html = '<p>
<a>link 1</a> >> <a>link 2</a> >> <a>link 3</a> >> <a>link 4</a>
</p>';
$dom = new DOMDocument;
$dom->loadHTML($html);
$a = $dom->getElementsByTagName('a');
$lastA = $a->item($a->length - 1);
$dom->getElementsByTagName('p')->item(0)->appendChild($dom->createTextNode($lastA->nodeValue));
$lastA->parentNode->removeChild($lastA);
$newHtml = '';
foreach ($dom->getElementsByTagName('body')->item(0)->childNodes as $node) {
$newHtml .= $dom->saveHTML($node);
}
echo $newHtml;
CodePad .
此代码输出...
<p>
<a>link 1</a> >> <a>link 2</a> >> <a>link 3</a> >>
link 4</p>
当然,您不应该在 HTML 中直接使用 >
(它应该编码为 >
)。但如果必须,请在最终 HTML 上使用 html_entity_decode()
。
CodePad .
关于php - 如何使用 php 查找并删除字符串中的最后一个链接标签?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9027182/