我想要这个:
<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标签就可以了。
答案 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往往是冗长的。无论如何,DOMDocument
,DOMElement
和DOMNode
类都是well documented。阅读文档,做笔记并开始破解。