Twig去除HTML标签时如何在块级元素间保留/添加空格?
不用正则的话,有两种简便的实现方式:
方式一:利用原始HTML的换行转换空格
如果你的HTML代码里块级元素(比如<h2>、<p>)之间本身带有换行符,可以先把换行替换成空格,再调用striptags:
{{ your_html_string|replace({"\n": ' '})|striptags|trim }}
这个方法依赖原始HTML的格式,适合由编辑器生成、保留了块级元素换行的场景。
方式二:替换块级元素结束标签为空格
如果HTML是压缩过的(没有换行),可以直接把常见块级元素的结束标签替换成空格,再过滤标签:
{{ your_html_string|replace({ '</h2>': ' ', '</p>': ' ', '</div>': ' ', '</section>': ' ' })|striptags|trim }}
只需要列出你业务中用到的块级元素结束标签即可,操作简单,不需要正则。
进阶:自定义Twig过滤器(可选)
如果需要处理大量未知的块级元素,可以自定义一个过滤器,用DOM解析遍历元素并拼接内容:
// 在Twig扩展中添加过滤器 $twig->addFilter(new TwigFilter('strip_tags_with_spaces', function ($html) { $dom = new DOMDocument(); @$dom->loadHTML($html); $xpath = new DOMXPath($dom); $blockElements = $xpath->query('//h1|//h2|//h3|//p|//div|//section'); $content = []; foreach ($blockElements as $elem) { $content[] = trim($elem->nodeValue); } return implode(' ', $content); }));
使用时直接调用:
{{ your_html_string|strip_tags_with_spaces }}
这个方法更通用,但需要写少量PHP代码,适合长期复用的场景。
内容的提问来源于stack exchange,提问作者MrUpsidown
相关产品推荐
相关产品推荐

