Функция проходится по переменной $content и закрывает все html теги внутри. Иногда бывает очень полезно.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 |
function close_tags($content) { $position = 0; $open_tags = array(); //теги для игнорирования $ignored_tags = array('br', 'hr', 'img'); while (($position = strpos($content, '<', $position)) !== FALSE){ //забираем все теги из контента if (preg_match("|^<(/?)([a-z\d]+)\b[^>]*>|i", substr($content, $position), $match)){ $tag = strtolower($match[2]); //игнорируем все одиночные теги if (in_array($tag, $ignored_tags) == FALSE){ //тег открыт if (isset($match[1]) AND $match[1] == ''){ if (isset($open_tags[$tag])) $open_tags[$tag]++; else $open_tags[$tag] = 1; } //тег закрыт if (isset($match[1]) AND $match[1] == '/'){ if (isset($open_tags[$tag])) $open_tags[$tag]--; } } $position += strlen($match[0]); }else $position++; } //закрываем все теги foreach ($open_tags as $tag => $count_not_closed) $content .= str_repeat("</{$tag}>", $count_not_closed); return $content; } |