Не нравятся результаты поиска? Попробуйте другой поиск!
dle-faq.ru FAQ (все вопросы) Общие вопросы по PHP Помогите внедрить функцию для автоматического закрытия HTML тегов?

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


     19.12.2014    Общие вопросы по PHP    943

вопрос
Добрый день,помогите внедрить в 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
218

2171 | 930

vitnet - 20 декабря 2014 13:29 - Эксперт

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

shmel1985
2

146 | 63

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

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

vitnet
218

2171 | 930

vitnet - 20 декабря 2014 19:28 - Эксперт

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

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

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