使用正则表达式删除空的段落标记<p> </p>(“空间”上的标准str_replace不起作用)

时间:2012-07-20 02:53:11

标签: php regex tinymce

当您按两次输入时,TinyMCE会创建空的段落标记。像:

<p> </p>

是哪个 <p>SPACE</p>

在FireBug中,它将此空间称为"&nbsp;",但html代码/数据库后端只显示一个空格。当我做"str_replace('<p> </p>'....."它没有找到块...基本上我认为“空间”在某种程度上不是一个标准的空间和某种borked编码空间。有没有我可以运行的正则表达式将删除此标记?我被困在这几个小时......甚至像

这样的东西

regex('<p>LESS THAN THREE CHARS</p>'...)

可能会起作用

谢谢

5 个答案:

答案 0 :(得分:6)

我会用:

$str = preg_replace('~<p>\s*<\/p>~i','',$str);

其中\s表示任何类型的空格(制表符,空格等),*表示此(空格)出现0或更多。因此,<p></p><p> </p><p>{multiple spaces here}</p>将全部替换为空字符串。额外的i标记用于不区分大小写,以防<p>可能改为<P>

答案 1 :(得分:1)

$text = preg_replace('#<p>&nbsp;</p>#i','<p></p>', $text);

为我工作,因为变量包含实际的字符串"&nbsp;"而不是非破坏空间的unicode字符。因此#<p>.</p>#i既没有工作也没有从字符映射中复制非破坏空格字符。

答案 2 :(得分:0)

如果<p>标记具有任何内联属性,则上述答案将无效 <p style="font-weight:bold">

这是一个抓住它的正则表达式:

#<p[^>]*>(\s|&nbsp;|</?\s?br\s?/?>)*</?p>#

答案 3 :(得分:0)

没有一个给定的答案对我有用,但这是做了什么:

$str = str_replace('&lt;p&gt;&nbsp;&lt;/p&gt;', '', $str);

绝对不是最正确的做事方式。但如果您正在使用(反对)TinyMCE,特别是在SuiteCRM内部,这应该会有所帮助。

答案 4 :(得分:-1)

试试这个

$string="a bunch of text with <p> </p> in it";

$string=str_replace("/<p> <\/p>/","",$string);

注意几件事:要匹配的字符串前后的正斜杠,以及第二段标记中正斜杠之前的转义反斜杠。