当您按两次输入时,TinyMCE会创建空的段落标记。像:
<p> </p>
是哪个
<p>SPACE</p>
在FireBug中,它将此空间称为" "
,但html代码/数据库后端只显示一个空格。当我做"str_replace('<p> </p>'....."
它没有找到块...基本上我认为“空间”在某种程度上不是一个标准的空间和某种borked编码空间。有没有我可以运行的正则表达式将删除此标记?我被困在这几个小时......甚至像
regex('<p>LESS THAN THREE CHARS</p>'...)
可能会起作用
谢谢
答案 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> </p>#i','<p></p>', $text);
为我工作,因为变量包含实际的字符串" "
而不是非破坏空间的unicode字符。因此#<p>.</p>#i
既没有工作也没有从字符映射中复制非破坏空格字符。
答案 2 :(得分:0)
如果<p>
标记具有任何内联属性,则上述答案将无效
<p style="font-weight:bold">
。
这是一个抓住它的正则表达式:
#<p[^>]*>(\s| |</?\s?br\s?/?>)*</?p>#
答案 3 :(得分:0)
没有一个给定的答案对我有用,但这是做了什么:
$str = str_replace('<p> </p>', '', $str);
绝对不是最正确的做事方式。但如果您正在使用(反对)TinyMCE,特别是在SuiteCRM内部,这应该会有所帮助。
答案 4 :(得分:-1)
试试这个
$string="a bunch of text with <p> </p> in it";
$string=str_replace("/<p> <\/p>/","",$string);
注意几件事:要匹配的字符串前后的正斜杠,以及第二段标记中正斜杠之前的转义反斜杠。