从标签内部删除<br/>

时间:2013-09-30 08:29:30

标签: php tags preg-replace str-replace

我有一个来自数据库的字符串,并且写得不正确:

$string = " <P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN <br />style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt"><SPAN <br />style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt">M</SPAN>.Of. <br />nr. 1 din 5 ianuarie 1998</SPAN></P><SPAN <br />style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt"><br /><P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN <br />style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt"><FONT <br />color=#0000ff>NOTA ETO a se vedea: 1)&nbsp;Regulamentele</FONT> <A <br />href="doc:910013103/33">nr. 131/1991,&nbsp;<A <br />href="doc:1010117203/2">1172/2001,&nbsp;<A <br />href="doc:1050089003/2">890/2005.</SPAN></P><br /><P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN <br />style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt">&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; <br /><FONT color=#0000ff>2)&nbsp;Norme metodologice <A <br />href="doc:1020012755/5">nr.127/2002.</FONT></SPAN></P><br /><P class=MsoNormal style="MARGIN: 0in 0in 0pt"><SPAN <br />style="FONT-SIZE: 10pt; COLOR: black; FONT-FAMILY: 'Courier New'; mso-bidi-font-size: 12.0pt"><FONT <br />color=#0000ff>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;3)&nbsp;Metodologie&nbsp;<A <br />href="doc:1070064010/25">nr.640/2007.&nbsp;&nbsp;</FONT></P><br /> ";

我在其他代码中有<br />个标签,我不知道如何删除br

我尝试使用正则表达式

$no_br = preg_replace('/(.*<.*)<br \/>(^.*>.*)/i',"$1 $2",$string);

但它不起作用

我不想删除所有<br />,只删除标记内的内容

我已经使用$string = str_replace(array("\r\n", "\r", "\n" ), "<br />", $row['val'] );将\ n转换为breakline,因为我在移动应用的webview中使用此文本

4 个答案:

答案 0 :(得分:1)

换行符

替换<br/>标记
   $string =  preg_replace("#<br\s*/?>#i", "\n", $string);

答案 1 :(得分:0)

使用此:

preg_replace('/(<br[\s]?[\/]?>[\s]*){3,}/', '<br /><br />', $string);

$string=preg_replace("{(<br[\\s]*(>|\/>)\s*){2,}}i", "<br /><br />", $string);
$string=preg_replace("{(<br[\\s]*(>|\/>)\s*)}i", "<br />", $string);

答案 2 :(得分:0)

删除br的所有排列:

<br> <br /> <br/> <br   >

查看用户提供的strip_only()功能。

echo strip_tags($string, '<br><br /><br/><br >');

答案 3 :(得分:0)

您可以使用

$s = preg_replace_callback('~<[^>]*>~', function ($m) { 
    return str_replace('<br />', '', $m[0]); }
, $s);

或者,对于损坏或不整洁的HTML:

$s = preg_replace_callback('~<[^>]*>~', function ($m) { 
    return preg_replace('~<\s*br\s*/?\s*>~i', '', $m[0]); }
, $s);

重点是:

  • 所有元素节点都与<[^>]*>正则表达式匹配(<,然后是除>之外的0+个字符,然后是>
  • 匹配项将传递到preg_replace_callback
  • 中的匿名函数
  • str_replace('<br />', '', $m[0])将所有<br />替换为匹配文本内仅空字符串。要说明<br>的任何变体,您可以使用另一个preg_replacepreg_replace('~<\s*br\s*/?\s*>~i', '', $m[0])