Как удалить пустые теги абзаца из строки?
Я столкнулся с небольшой проблемой кодирования с шаблоном WordPress. Это код, который я использую в шаблоне:
<?php echo teaser(40); ?>
В моих функциях я использую это, чтобы отделять теги и получать контент только от разрешенных тегов.
<?php
function teaser($limit) {
$content = explode(' ', get_the_content(), $limit);
if (count($content)>=$limit) {
array_pop($content);
$content = implode(" ",$content).'...';
} else {
$content = implode(" ",$content);
}
$content = preg_replace('/\[.+\]/','', $content);
$content = apply_filters('the_content', $content);
$content = str_replace(']]>', ']]>', $content);
$content = strip_tags($content, '<p><a><ul><li><i><em><strong>');
return $content;
}
?>
Проблема: я использую приведенный выше код для разметки тегов из контента, но WordPress уже помещает теги изображений в абзац. Таким образом, результат - это теги абзаца, где изображения удаляются.
Просто для очистки моего кода и бесполезных пустых тегов.
Мой вопрос заключается в том, как удалить пустые теги абзаца?
<p></p>
Большое спасибо!:)
Ответы
Ответ 1
используйте это регулярное выражение для удаления пустого абзаца
/<p[^>]*><\\/p[^>]*>/
Пример
<?php
$html = "abc<p></p><p>dd</p><b>non-empty</b>";
$pattern = "/<p[^>]*><\\/p[^>]*>/";
//$pattern = "/<[^\/>]*>([\s]?)*<\/[^>]*>/"; use this pattern to remove any empty tag
echo preg_replace($pattern, '', $html);
// output
//abc<p>dd</p><b>non-empty</b>
?>
Ответ 2
Это избавляет от всех пустых тегов p
, даже если они содержат внутри spaces
или &nbps;
.
$str = "<p> </p><p> </p><p> </p><p>Sample Text</p>";
echo preg_replace("/<p[^>]*>[\s| ]*<\/p>/", '', $str);
Это только эхо-сигнал <p>Sample Text</p>
Ответ 3
Используйте str_replace для удаления пустых тегов <p></p>
.
$content = str_replace("<p></p>","",$content);
Все более продвинутые будут нуждаться в регулярных выражениях.
Ответ 4
$content = preg_replace('/<p[^>]*?></p>/', $content);
Обновление: должно быть:
$content = preg_replace('/<p [^>]*></p>/', $content);
Ответ 5
Эта функция удаляет пустые элементы, а затем другие пустые элементы, созданные из предыдущих удаленных элементов. (Строка примера содержит пробелы, вкладки и возврат каретки.)
function teaser( $html ) {
$html = str_replace( ' ', ' ', $html );
do {
$tmp = $html;
$html = preg_replace(
'#<([^ >]+)[^>]*>[[:space:]]*</\1>#', '', $html );
} while ( $html !== $tmp );
return $html;
}
Имея следующий пример:
<?php
$html = '
<p>Hello!
<div class="foo">
<p id="nobody">
<span src="ok"> </span>
</p>
</div>
</p>
';
echo teaser( $html );
?>
Функция возвращает:
<p>Hello!
</p>
Ответ 6
Удалите тег <p>
из вашего вызова strip_tags. Второй аргумент перечисляет допустимые теги (которые не разделяются).
$content = strip_tags($content, '<a><ul><li><i><em><strong>');
Ответ 7
Вы пробовали решение CSS3?
p:empty {display: none;}