Как удалить h-tag и заменить его на span-tag (preg_replace?)

0

Я хочу это:

<h2>My Headline</h2>

к этому:

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

Я пробовал это, но это всего лишь способ удалить h-tag с содержимым:/

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

Может быть, есть решение "преобразовать" все h-теги в теги span с правильным классом?

Спасибо за поддержку.

Еще одна идея изменить теги:

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

Может быть, это поможет показать, что я имею в виду/хочу.

У меня есть контент ($ introtext) и виды (тизер [categoryView] и детали [articleView]). Для categoryView я хочу изменить все h-теги на теги span, из-за описания категории. Если отображается ItemView, h-теги в порядке.

  • 0
    это домашнее задание или что-то?
  • 0
    Помните, что ваша замена недействительна - вам понадобится </span> , а не </h2> . Кроме того, почему вы хотите это сделать? Может быть лучшее решение (например, изменение стиля ваших элементов h2 с помощью CSS). Также: stackoverflow.com/a/1732454/300836
Показать ещё 6 комментариев
Теги:
joomla
replace

1 ответ

1

Для записи: Markup (HTML/XML) и Regex не очень хорошо смешиваются. Регулярные выражения просто не могут справиться со сложностями языков разметки, поэтому любая попытка обработки разметки с использованием регулярного выражения в конечном итоге закончится. К счастью, 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 value
    $span->setAttribute('class', 'h2');
    $header->parentNode->replaceChild($span, $header);//replace element
}

Конечно, этот код является несколько подробным, но тогда DOM api имеет тенденцию быть подробным. В любом случае DOMDocument, DOMElement и DOMNode хорошо документированы. Прочитайте документы, сделайте заметки и взломайте.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню