Как я могу проверить, все ли HTML-теги закрыты?

У меня есть эта проблема:

пользователь может добавить описание HTML, и оно будет показано в его профиле; когда я показываю список пользователей, я бы тоже хотел показать это описание.
поскольку он может быть слишком длинным, я собираюсь ограничить его до фиксированной длины, но, делая это, я могу нарушить синтаксис HTML, оставив некоторые открытые теги.

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

2 ответа

Решение

@tampe125 Это не мой код, но похоже, что он работает.

  <?php  /** * close all open xhtml tags at the end of the string

 * * @param string $html

 * @return string

 * @author Milian <mail@mili.de>

 */function closetags($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;}  ?>

Это простой валидатор JavaScript, который выполняет базовую проверку тегов. Валидатор XML

Единственная проблема заключается в том, что она остановится на первой ошибке, поэтому вам нужно работать с проблемами по одному.

Другие вопросы по тегам