问题
TinyMCE creates empty paragraph tags when you hit enter twice. like:
<p> </p>
Which is
<p>SPACE</p>
In FireBug it calls this space a " "
but the html code/DB backend just shows a space. When I do "str_replace('<p> </p>'....."
it doesnt find the block... basically I think the "space" is somehow not a standard space and some sort of borked encoded space. Is there a regex I can run that will remove this tag? I've been stuck on this for hours... or even something like
regex('<p>LESS THAN THREE CHARS</p>'...)
would probably work
Thank you
回答1:
I would use:
$str = preg_replace('~<p>\s*<\/p>~i','',$str);
where \s
signifies a white space of any kind (tab, space, etc.) and *
indicates 0 or more occurence of this (space). So <p></p>
, <p> </p>
, <p>{multiple spaces here}</p>
will all be replaced by an empty string. The additional i
flag is for case-insensitivity, just in case <p>
's might instead be <P>
's.
回答2:
$text = preg_replace('#<p> </p>#i','<p></p>', $text);
worked for me, as the variable contains the actual string " "
and not the non-breaking space unicode character. Thus neither #<p>.</p>#i
worked nor copying the non-breaking-space character from character map.
回答3:
The answers above won't work if <p>
tag has any inline attributes, such as
<p style="font-weight:bold">
.
Here is a regex to catch it:
#<p[^>]*>(\s| |</?\s?br\s?/?>)*</?p>#
回答4:
None of the given answers were working for me, but here's what did:
$str = str_replace('<p> </p>', '', $str);
Definitely not the most correct way to do things. But if you're working with (against) TinyMCE, specifically inside of SuiteCRM, this should help.
回答5:
Try this
$string="a bunch of text with <p> </p> in it";
$string=str_replace("/<p> <\/p>/","",$string);
Note a couple things: the forward slashes before and after the string to match, as well as the escaping backslash before the forward slash in the second paragraph tag.
来源:https://stackoverflow.com/questions/11572183/using-regex-to-remove-empty-paragraph-tags-p-p-standard-str-replace-on-sp