Закрыть незакрытые тэги
30 апреля 2009
Функция позволяет закрыть незакрытые HTML-тэги.
function closetags($html) { $single_tags = array('meta','img','br','link','area','input','hr','col','param','base'); preg_match_all('~<([a-z0-9]+)(?: .*)?(?<![/|/ ])>~iU', $html, $result); $openedtags = $result[1]; preg_match_all('~</([a-z0-9]+)>~iU', $html, $result); $closedtags = $result[1]; $len_opened = count($openedtags); if (count($closedtags) == $len_opened) { return $html; } $openedtags = array_reverse($openedtags); for ($i=0; $i < $len_opened; $i++) { if (!in_array($openedtags[$i], $single_tags)) { if (FALSE !== ($key = array_search($openedtags[$i], $closedtags))) { unset($closedtags[$key]); } else { $html .= '</'.$openedtags[$i].'>'; } } } return $html; }
Автор не я. Кто написал не помню…
Комментарии RSS по email OK
а насколько правильно он закрывает теги?
Николай
Попробуйте.
Имхо, баловство это. Для XML бы еще прокатило, но для HTML, с его неявным закрытием "пэшек" перед любым блочным тегом и т.п., это мало что меняет. Да и зачем так изворачиваться, когда есть Tidy?
Кстати, список одиночных тегов неполон -- как минимум, есть еще INPUT, HR, COL, PARAM и BASE...
SelenIT
Решение конечно же для закрытия XHTML. Использовано как раз было из-за отсутствия Tidy.
Список одиночных действительно неполон. Добавлю.
Спасибо, как нельзя кстати. Как раз собирался писать такую функцию
Функция позволяет не только закрыть все открытые теги, но и открыть все закрытые которые могут образоваться после вырезания участка кода XHTML из произвольного места.
Тоже не помню где подсмотрел
В регулярке некорректно обработаны обратные слэши, автору скрипта низачод)
Правильно:
спасибо большое за скрипт!
у меня возник вопрос, что если скрипт не в том порядке закроет теги, в случае дивной верски - он может наломать дров, кто его уже пробовал? напишите свои впечатления плиз
Я сделал, что если тег table есть, не обрезать, т.к. это зачастую вёрстку нехило сбивает.
Большое Спасибо за скрипты. Будем тестировать!!!
спасибоooooooooooo
предыдущаяяя ф-я просто добавляет в одиночные теги внутренний слэш. Т.е.
<br>
заменит на<br />