Блог веб-разработчика: в помощь программистам

Функция закрывает все открытые HTML теги.

Данная функция часто бывает полезной для сохранения валидности странице при выводе не полной новости.

function close_dangling_tags($html){
  #put all opened tags into an array
  preg_match_all("#<([a-z]+)( .*)?(?!/)>#iU",$html,$result);
  $openedtags=$result[1];
 
  #put all closed tags into an array
  preg_match_all("#</([a-z]+)>#iU",$html,$result);
  $closedtags=$result[1];
  $len_opened = count($openedtags);
  # all tags are closed
  if(count($closedtags) == $len_opened){
    return $html;
  }
 
  $openedtags = array_reverse($openedtags);
  # close tags
  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;
}
  • а как использовать эту функцию?

  • Функция работает некорректно, т.к. не учитывает одиночные теги типа , которые не надо закрывать

  • парсер скушал тег.
    …не учитывает одиночные теги типа <br>

  • Да, не учитывает одиночные теги

  • Спасибо! Хорошая функция.

You can follow any responses to this entry through the RSS 2.0 feed.