我在 WordPress 中使用短代码。在每个短代码输出(关闭 div)之后,我得到
(或
)标签。
试图过滤掉它们,但我不知道如何。生成的 HTML 看起来像
<div class="fullwidth"><!-- 1st shortcode-->
<div class="fullwidth-content">
<!-- 2nd shortcode-->
<div class="twocol-one"> content
</div><br>
</div><br>
<!-- 3rd shortcode-->
<div class="twocol-second"> content
</div><br>
<div class="clearboth"></div>
</div><br>
似乎 BR 是来自 tinyMCE 的换行符。我不想要冗长的射击代码行。
我正在尝试使用 preg_replace 但我无法创建正确的 $pattern。
你能帮我吗?
我的功能
function replace_br($content) {
$rep = preg_replace("/<\/div>\s*<br\s*\/?>/i", "</div>",$content);
return $rep; }
add_filter('the_content', 'replace_br');
不工作。
使用时
$rep = preg_replace("/\s*<br\s*\/?>/i", "",$content);
功能上,所有BR都被替换。
很好,但我想在关闭 DIV 标签后仅替换 BR。
str_replace("</div><br>", "</div>", $content);
也不起作用。
我的功能出了什么问题?
没有返回错误。
你一开始就做错了,因为你必须删除标签。 你做错了,因为你正在使用 HTML 的正则表达式(有时这是可以的)。
您使用的正则表达式的变体应该足够了:演示
你真的应该考虑使用
DOMDocument
或类似的:
$html = <<<HTML
...
HTML;
$dom = new DOMDocument();
$dom->loadHTML($html);
$element = $dom->getElementsByTagName('br');
$remove = [];
foreach($element as $item){
$remove[] = $item;
}
foreach ($remove as $item) {
$item->parentNode->removeChild($item);
}
$html = $dom->saveHTML();
echo $html;
这将删除所有
br
,您需要根据您的规格调整代码工作,但这应该是一个指针。
这是使用正则表达式的另一种方法
在你的情况下
/(?<=<\/div>)(<br[\s\/]?>)/mg