Как я могу удалить теги вокруг фрагмента HTML?

Я создаю пользовательский фильтр для текста, используя синтаксис asciidoc для Drupal, используя модуль customfilter. Я заключаю его в теги [asciidoc][/asciidoc] и когда я запускаю его через asciidoctor Команда вывод заключен в <div class="paragraph"><p> теги.

Подобный вывод, в котором я использую тег [asciidoc] для форматирования HTML-ссылок, выглядит следующим образом.

On the markup side Drupal's contrib `markdown` filter has been somewhat iffy,
and so has the `bbcode` filter. Looking around for other more compact documenting
systems led me to the https://asciidoc.org[Asciidoc] utility and its more
advanced brother https://asciidoctor.org[Asciidoctor]. In combination with another
 Drupal module called https://drupal.org/project/customfilter[customfilter] which
makes it easy to create your own filters, I think I have hit on a combination
of modules which allow me as much freedom and fine control on my pages as I want.
<div class="paragraph">
<p>On the markup side Drupal&#8217;s contrib <code>markdown</code> filter has been somewhat iffy,
and so has the <code>bbcode</code> filter. Looking around for other more compact documenting
systems led me to the <a href="https://asciidoc.org">Asciidoc</a> utility and its more
advanced brother <a href="https://asciidoctor.org">Asciidoctor</a>. In combination with another
 Drupal module called <a href="https://drupal.org/project/customfilter">customfilter</a> which
makes it easy to create your own filters, I think I have hit on a combination
of modules which allow me as much freedom and fine control on my pages as I want.</p>
</div>

Есть ли какая-нибудь функция PHP, которая может принимать строку HTML и набор тегов для включения в строку и возвращать внутренний HTML, который они содержат? Или, может быть, какое-то выражение регулярного выражения, которое может соответствовать части между тегами?

Это желаемый результат

On the markup side Drupal&#8217;s contrib <code>markdown</code> filter has been somewhat iffy,
and so has the <code>bbcode</code> filter. Looking around for other more compact documenting
systems led me to the <a href="https://asciidoc.org">Asciidoc</a> utility and its more
advanced brother <a href="https://asciidoctor.org">Asciidoctor</a>. In combination with another
 Drupal module called <a href="https://drupal.org/project/customfilter">customfilter</a> which
makes it easy to create your own filters, I think I have hit on a combination
of modules which allow me as much freedom and fine control on my pages as I want.

Я задал связанный вопрос, можно ли настроить asciidoc, чтобы избежать включения вывода в <div class="paragraph"><p>...</p></div> - Есть ли в asciidoctor параметр для удаления тегов и

из источника, который он выводит?

1 ответ

Решение

Через чистый PHP вы можете использовать DOMDocument который я не рекомендую использовать, потому что он медленный, и у вас будут проблемы с отслеживанием его ошибок и так далее. По той же причине я не собираюсь объяснять больше об этом объекте. Просто ссылка с официального сайта:

PHP DomDocument

Примечание: я лично предпочитаю использовать DomDocument например, когда вы работаете с большими текстами, я читал всю страницу и получал все элементы один за другим, что было почти невозможно с помощью регулярных выражений. В этом случае я использовал DomDocument,

Вернемся к вашей теме. Ваш пример показывает, что вы не анализируете большие куски, поэтому я рекомендую использовать Regex,

preg_match_all( '/<p>(?P<content>.*?)<\/p>/s' ,$text, $ref );
var_dump($ref['content']);

Приведенное выше регулярное выражение дает вам все элементы между p тег.

Вы можете поиграть с ним и сделать новый, как это:

preg_match_all( '/<div class="paragraph">\s<p>(?P<content>.*?)<\/*p>\s<\/*div>/' ,$text, $ref );

что дает вам все между тегами div (теги могут иметь любой атрибут).

Также смотрите ссылку ниже на регулярное выражение

Regex Tutorial

Удачи

Другие вопросы по тегам