簡體   English   中英

PHP:刪除過多 <br> 標簽

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM