0

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

$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 转换为断线,因为我在移动应用程序的 web 视图中使用此文本

4

4 回答 4

1

用换行符替换<br/>标签

   $string =  preg_replace("#<br\s*/?>#i", "\n", $string);
于 2013-09-30T08:32:52.213 回答
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);
于 2013-09-30T08:33:53.160 回答
0

要删除 br 的所有排列:

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

查看用户贡献的strip_only()功能。

echo strip_tags($string, '<br><br /><br/><br >');
于 2013-09-30T08:35:32.703 回答
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);

重点是:

  • 所有元素节点都与<[^>]*>正则表达式匹配( ,然后是除then<之外的 0+ 个字符)>>
  • 匹配被传递给和中的匿名preg_replace_callback函数
  • str_replace('<br />', '', $m[0])在匹配的文本内<br />用空字符串替换所有内容。为了说明您的任何变体,您可以使用另一个, .<br>preg_replacepreg_replace('~<\s*br\s*/?\s*>~i', '', $m[0])
于 2019-02-09T16:53:25.983 回答