Удалить ненужные теги абзаца из строки - PullRequest
4 голосов
/ 22 апреля 2009

Если у меня есть строка вроде:

<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; s и пробелы.

Ответы [ 3 ]

15 голосов
/ 22 апреля 2009
$result = preg_replace('#<p[^>]*>(\s|&nbsp;?)*</p>#', '', $input);

Это не перехватывает буквальные nbsp символы в выводе, но это очень редко можно увидеть.

Поскольку вы имеете дело с HTML, если это пользовательский ввод, я мог бы предложить использовать HTML Purifier, который также будет иметь дело с уязвимостями XSS. Параметр конфигурации, который вы хотите там удалить пустые теги p, это% AutoFormat.RemoveEmpty.

5 голосов
/ 22 апреля 2009

Это регулярное выражение будет работать против вашего примера:

<p[^>]*>(?:\s+|(?:&nbsp;)+|(?:<br\s*/?>)+)*</p>
1 голос
/ 22 апреля 2009

Как сказал первоначальный ответчик, регулярное выражение здесь не лучшее решение, вам нужен какой-то стриптизер HTML.

Функция на этом сайте: http://nadeausoftware.com/articles/2007/09/php_tip_how_strip_html_tags_web_page

Должно помочь вам, вам просто нужно немного поработать со строками, чтобы получить новые строки и то, что не вернулось в нужный формат.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...