从字符串中删除无用的段落标记

时间:2009-04-21 21:54:37

标签: php regex

如果我有一个字符串:

<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>

我怎样才能把它变成:

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

正则表达式需要选择&nbsp;和空格。

3 个答案:

答案 0 :(得分:15)

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

这不会捕获输出中的文字字符,但这种情况很少见。

由于您正在处理HTML,如果这是用户输入,我可能会建议使用HTML Purifier,它也将处理XSS漏洞。您希望在那里删除空p标签的配置设置是%AutoFormat.RemoveEmpty。

答案 1 :(得分:5)

此正则表达式将违反您的示例:

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

答案 2 :(得分:1)

正如最初的回复者所说,正则表达式不是这里最好的解决方案,你想要的是某种html脱衣舞。

此网站上的一项功能: http://nadeausoftware.com/articles/2007/09/php_tip_how_strip_html_tags_web_page

应该帮助你,你只需要使用一些字符串操作来获取新行,而不是回到你想要的格式。