2009-04-21 18 views
4

Wenn ich eine Zeichenfolge wie haben:entfernen nutzlos Absatz-Tags aus string

<p>&nbsp;</p> 
<p></p> 
<p class="a"><br /></p> 
<p class="b">&nbsp;</p> 
<p>blah blah blah this is some real content</p> 
<p>&nbsp;</p> 
<p></p> 
<p class="a"><br /></p> 

Wie kann ich es in nur drehen:

<p>blah blah blah this is some real content</p> 

Die Regex &nbsp; s und Räume holen muss.

Antwort

15
$result = preg_replace('#<p[^>]*>(\s|&nbsp;?)*</p>#', '', $input);

Diese nicht wörtlich nbsp Zeichen in der Ausgabe verfängt, aber das ist sehr selten zu sehen.

Da es sich bei HTML um eine Benutzereingabe handelt, schlage ich vor, HTML Purifier zu verwenden, das sich auch mit XSS-Schwachstellen befasst. Die Konfigurationseinstellung, die Sie möchten, um leere p-Tags zu entfernen, ist% AutoFormat.RemoveEmpty.

5

wird Diese Regex gegen Ihr Beispiel arbeiten:

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