Как я могу удалить теги вокруг фрагмента 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’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’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
который я не рекомендую использовать, потому что он медленный, и у вас будут проблемы с отслеживанием его ошибок и так далее. По той же причине я не собираюсь объяснять больше об этом объекте. Просто ссылка с официального сайта:
Примечание: я лично предпочитаю использовать 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 (теги могут иметь любой атрибут).
Также смотрите ссылку ниже на регулярное выражение
Удачи