Не нравятся результаты поиска? Попробуйте другой поиск!
DLE FAQ » Все вопросы » Общие вопросы по PHP » Помогите внедрить функцию для автоматического закрытия HTML тегов?

Помогите внедрить функцию для автоматического закрытия HTML тегов?


     19.12.2014    Все вопросы » Общие вопросы по PHP    1195

вопрос
Добрый день,помогите внедрить в DLE
Как это сделать что бы работало в полной новости?
Спасибо.
<?php
function close_tags($html){
    
    $ignored_tags = array('br', 'hr', 'img');
    
    # ищем открывающиеся теги
    preg_match_all("#<([a-z]+)( .*)?(?!/)>#iU",$html,$result);
    $openedtags=$result[1];
    
    # удаляем незакрывающиеся теги
    foreach($openedtags as $i=>$tag)
    {
        if( in_array($tag, $ignored_tags) )
        {
            unset($openedtags[$i]);
        }
    }
    
    # ищем закрывающие теги
    preg_match_all("#{C}<!--([a-z]+)-->#iU",$html,$result);
    $closedtags=$result[1];
    $len_opened = count($openedtags);
    
    # если все теги закрыты
    if(count($closedtags) == $len_opened){
        # TODO: здесь хорошо бы проверять
        # соответствие тегов, например,
        # если открыты <div> и <b>,
        # а закрыты <em> и <p>
        # то скрипт посчитает, что все теги закрыты.
        return $html;
    }
    
    $openedtags = array_reverse($openedtags);
    
    # закрываем теги
    for($i=0;$i < $len_opened;$i++) {
        if (!in_array($openedtags[$i],$closedtags)){
            $html .= '<!--'.$openedtags[$i].'-->';
        } else {
            unset(
              $closedtags[
                  array_search(
                  $openedtags[$i],
                  $closedtags
            )]);
        }
    }
    return $html;
}
?>

Пример использования:
$html = close_tags($_POST['html']);

Ответа пока нет


3 комментария

vitnet
Эксперт

vitnet - 20 декабря 2014 13:29 -

Проверял, работает с HTML (не BB) тегами. Вам при добавлении новостей или на странице полной новости?

shmel1985
Юзер

shmel1985 - 20 декабря 2014 14:15 -

vitnet
Я правильно понимаю? если при оформлении новости я не закрою бб код данная функция не сделает это автоматически после отправки новости?
К примеру:
[b]Год: 2014
[b]Номер[/b]: 01-26

vitnet
Эксперт

vitnet - 20 декабря 2014 19:28 -

Нет.
будет так
[b]Год: 2014
[b]Номер[/b]: 01-26[/b]

Чтобы комментировать - войдите или зарегистрируйтесь на сайте

Похожие вопросы

наверх