QAlt / Полезные статьи, скрипты / 19 мая 2014г, понедельник

Автоматическое закрытие всех открытых HTML тегов

Для вывода статьи на сайт она должна быть оформлено не только красиво, но и правильно с точки зрения браузера. То есть все открывшиеся HTML теги должны быть закрыты! Иначе вся вёрстка сайта «поедет». Чтобы этого избежать нужно, во-первых, писать грамотный HTML код в статье, во-вторых, контролировать целостность HTML кода статей (особенно когда статьи добавляют несколько человек ещё и в HTML несведущие, а обучать редакторов вёрстке - себе дороже, у них и так забот хватает). Контролю целостности HTML кода и посвещена данная статья.

Для этого нужно проверить весь текст, найти открытые HTML теги и проверить наличие соответствующих закрывающих тегов. И если таковых не хватает - добавить. 

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

<?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}#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 .= '';
        } else {
            unset(
              $closedtags[
                  array_search(
                  $openedtags[$i],
                  $closedtags
            )]);
        }
    }
    return $html;
}
?>

Пример использования:

$html = close_tags($_POST['html']);

 

Список всех статей »

home

Quality Alt
Разработка сайтов и
web-интерфейсов

8 923 232-88-90