Açık Kalan HTML Etiketlerini Kapatma
28
●2.917
- 21-06-2010, 21:52:59
function closetags($html) { $arr_single_tags = array('meta','img','br','link','area'); #put all opened tags into an array preg_match_all('#<(?!meta|img|br|hr|input\b)\b([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],$arr_single_tags)) { if(!in_array($openedtags[$i], $closedtags)) { $html .= '</'.$openedtags[$i].'>'; } else { unset($closedtags[array_search($openedtags[$i], $closedtags)]); } } } return $html; } function checkLast5($string) { $last5 = substr($string, -5); $pos = strpos($last5, "</"); if ($pos === false) { return $string; } else { return substr($string, 0, $pos-5); } }Bunlar iki tane fonksiyonum. Önce checkLast5 fonksiyonuyla tamamlanmamış bir etiket var mı kontrol ettirip varsa sildiriyorum. Daha sonra closetags fonksiyonuyla kapatılmamış etiketleri kapattırıyorum.
Tek sorunum şu: Örneğin <span style="color: red"> gibi bir etiket açıksa, sorun yok. </span> olarak kapatıyor. Ancak <span style="colo şeklinde olduğunda öylece bırakıyor. Ve bu da sayfadaki düzeni bozuyor.
__________________________________________________ ______________
ÇÖZÜMÜ
BBCode'ları ayıklarken preg_replace'te [$bbc](.*)[/$bbc] şeklinde ararken [$bbc] ve [/$bbc] şeklinde iki farklı preg_replace ile hallettim.