[英]PHP: Remove excessive <br> tags
我得到一些“不潔”的html字符串,我需要清理。
我想用2個html換行符連續替換“2個以上”的html換行符。
所以以下字符串:
$string = 'ytefey soeije hesouhodeseojedowe<br><br>
<br>ioueshe oiwj<br /><br />oijeewje<br /><br> <br> <br>';
應該結束這樣的事情:
$string = 'ytefey soeije hesouhodeseojedowe<br><br>
ioueshe oiwj<br /><br />oijeewje<br><br> ';
到目前為止我得到了這個:
$string = preg_replace('#(<br>|<br />){2,}#i', '<br><br>', $string);
但它並沒有考慮到線路和空間。
你可以使用preg_replace()
和一個簡單的正則表達式:
/(<br>\s*|<br \/>\s*){3,}/i
基本上它或者匹配<br>
或<br />
( (<br>|<br \\/>)
)在它們前面有零個或多個空格( \\s*
)至少3次或更多次( {3,}
)。
$string = preg_replace("/(<br>\s*|<br \/>\s*){3,}/i", "<br><br>", $string);
以下內容適用於字符串中的任何類型換行,並且速度更快,因為它沒有PCRE必須記住的匹配組。
<?php
$string = "
ytefey soeije hesouhodeseojedowe<br><br>
<br>ioueshe oiwj<br /><br />oijeewje<br /><br> <br> <br>
foo<br />
<br />
bar<br/>
";
// @see https://regex101.com/r/vR6rU5/2
$string = preg_replace_all('/(?:<br\s*\/?>(?:\s|\R)*){2,}/iu', "<br><br>", $string);
// Maybe trim excessive line feeds and breaks at the beginning and end?
// @see https://regex101.com/r/uS9jW0/1
$string = preg_replace('/(?:^\R*(?:<br\s*\/?>)*|(?:<br\s*\/?>)*\R*$)/iu', "", $string);
print_r($string);
// ytefey soeije hesouhodeseojedowe<br><br>ioueshe oiwj<br><br>oijeewje<br><br>foo<br><br>bar
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.