Рассмотрим следующую строку 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, если это имеет значение.
@DarkBee ах, это действительно жизнеспособное решение. Сначала выполните замену, затем примените стрип-теги. Мне просто нужно перечислить все теги блочных элементов, доступные в моем редакторе (текст взят из Drupal). И узнайте, как я могу создать фильтр Twig :) Спасибо за это.
@DarkBee это помогло в моем случае. Если хотите, можете написать ответ.
В 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 }}
Действительно, сохраните или добавьте (это было в заголовке вопроса, но не в тексте... обновлено). Я знаю, что его там вообще нет. Мне просто было интересно, существует ли фильтр или опция фильтра, которая позволила бы добиться этого. Я мог бы пойти по пути регулярного выражения, если нет лучшего варианта.