如何删除h-tag并用span-tag替换它(preg_replace?)

时间:2015-01-05 13:17:20

标签: php joomla replace

我想要这个:

<h2>My Headline</h2>

到此:

<span class="h2">My Headline</span>

我试过这个,但这只是一种用内容删除h-tag的方法:/

$introtext = preg_replace('/<h2[^>]*>([\s\S]*?)<\/h2[^>]*>/', '', $introtext);

也许有一个解决方案可以将所有h-tag“转换”为具有正确类别的span-tags?

感谢您的支持。

更改标签的另一个想法是:

$introOld = array('/<h2>/','/</h2>/');
$introNew = array('<span class="h2">','</span>');
$introtext = preg_replace($introOld, $introNew, $introtext);

也许这将有助于显示,我的意思/想要。

我有内容($ introtext)和视图(teaser [categoryView]和详细[articleView])。 对于categoryView,我想将所有h-tag更改为span-tags,因为类别描述。 如果显示了articleView,那么h标签就可以了。

1 个答案:

答案 0 :(得分:1)

对于记录:标记(HTML / XML)和正则表达不能很好地混合。正则表达式无法应对标记语言的复杂性,因此最终尝试使用正则表达式will end in tears处理标记。幸运的是,PHP有一个你可以使用的DOM解析器,这使你可以相对容易地做你想做的事情:

$dom = new DOMDocument();
$dom->loadHTML($yourMarkup);
$headers = $dom->getElementsByTagName('h2');
foreach ($headers as $header)
{
    $span = $dom->createElement('span', $header->nodeValue);//create span with h2's value
    $span->setAttribute('class', 'h2');
    $header->parentNode->replaceChild($span, $header);//replace element
}

当然,这段代码有点冗长,但DOM api往往是冗长的。无论如何,DOMDocumentDOMElementDOMNode类都是well documented。阅读文档,做笔记并开始破解。