Подтвердить что ты не робот

Как удалить пустые теги абзаца из строки?

Я столкнулся с небольшой проблемой кодирования с шаблоном 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(']]>', ']]&gt;', $content);
    $content = strip_tags($content, '<p><a><ul><li><i><em><strong>');
    return $content;
}
?>

Проблема: я использую приведенный выше код для разметки тегов из контента, но WordPress уже помещает теги изображений в абзац. Таким образом, результат - это теги абзаца, где изображения удаляются.

Просто для очистки моего кода и бесполезных пустых тегов. Мой вопрос заключается в том, как удалить пустые теги абзаца?

<p></p>

Большое спасибо!:)

4b9b3361

Ответ 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> &nbsp; </p><p>&nbsp</p><p>Sample Text</p>";

echo preg_replace("/<p[^>]*>[\s|&nbsp;]*<\/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( '&nbsp;', ' ', $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">&nbsp;</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;}