Теги Twig Strip, но сохраняйте (или добавляйте) пробелы между элементами уровня блока

Рассмотрим следующую строку HTML:

{% set html = '<h2>Neo praemitto velit.</h2><p>Caecus metuo proprius.</p><p>At nobis plaga tego.</p>' %}

Я запускаю striptags() в этой строке:

{{ html|striptags() }}

Текущий выход:

Neo praemitto velit.Caecus metuo proprius.At nobis plaga tego.

Ожидаемый результат:

Neo praemitto velit. Caecus metuo proprius. At nobis plaga tego.

Вопрос:

Есть ли простой способ сохранить (или добавить) пробелы между несколькими закрывающими и открывающими <p> и другими тегами уровня блока (например, <h2> и т. д.), которые подразумевают разрыв строки?

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

Я использую Twig 3.8.0, если это имеет значение.

Действительно, сохраните или добавьте (это было в заголовке вопроса, но не в тексте... обновлено). Я знаю, что его там вообще нет. Мне просто было интересно, существует ли фильтр или опция фильтра, которая позволила бы добиться этого. Я мог бы пойти по пути регулярного выражения, если нет лучшего варианта.

MrUpsidown 25.04.2024 11:35

@DarkBee ах, это действительно жизнеспособное решение. Сначала выполните замену, затем примените стрип-теги. Мне просто нужно перечислить все теги блочных элементов, доступные в моем редакторе (текст взят из Drupal). И узнайте, как я могу создать фильтр Twig :) Спасибо за это.

MrUpsidown 25.04.2024 11:40

@DarkBee это помогло в моем случае. Если хотите, можете написать ответ.

MrUpsidown 25.04.2024 13:42
Стоит ли изучать PHP в 2023-2024 годах?
Стоит ли изучать PHP в 2023-2024 годах?
Привет всем, сегодня я хочу высказать свои соображения по поводу вопроса, который я уже много раз получал в своем сообществе: "Стоит ли изучать PHP в...
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
Поведение ключевого слова "this" в стрелочной функции в сравнении с нормальной функцией
В JavaScript одним из самых запутанных понятий является поведение ключевого слова "this" в стрелочной и обычной функциях.
Приемы CSS-макетирования - floats и Flexbox
Приемы CSS-макетирования - floats и Flexbox
Здравствуйте, друзья-студенты! Готовы совершенствовать свои навыки веб-дизайна? Сегодня в нашем путешествии мы рассмотрим приемы CSS-верстки - в...
Тестирование функциональных ngrx-эффектов в Angular 16 с помощью Jest
В системе управления состояниями ngrx, совместимой с Angular 16, появились функциональные эффекты. Это здорово и делает код определенно легче для...
Концепция локализации и ее применение в приложениях React ⚡️
Концепция локализации и ее применение в приложениях React ⚡️
Локализация - это процесс адаптации приложения к различным языкам и культурным требованиям. Это позволяет пользователям получить опыт, соответствующий...
Пользовательский скаляр GraphQL
Пользовательский скаляр GraphQL
Листовые узлы системы типов GraphQL называются скалярами. Достигнув скалярного типа, невозможно спуститься дальше по иерархии типов. Скалярный тип...
0
3
79
1
Перейти к ответу Данный вопрос помечен как решенный

Ответы 1

Ответ принят как подходящий

В Twig нет встроенных фильтров, которые могут достичь желаемого, однако вы можете использовать некоторые строковые функции, чтобы получить желаемый эффект.

{{ html|replace({
    '</h1>': ' ',
    '</h2>': ' ',
    '</h3>': ' ',
    '</h4>': ' ',
    '</h5>': ' ',
    '</h6>': ' ',
    '</p>': ' ',    
}) | striptags }}

демо


Если вам это нужно более чем в одном месте, рассмотрите возможность добавления (пользовательского) фильтра в ветку, например.

$filter = new \Twig\TwigFilter('replace_html', function ($string) {
    return strip_tags(str_replace(['</h1>', '</h2>', '</h3>', '</h4>', '</h5>', '</h6>', '</p>',], ' ', $string));
});


$twig = new \Twig\Environment($loader);
$twig->addFilter($filter);

{{ html | replace_html }}

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