• 21-06-2010, 16:38:55
    #28
    notepad++ ın SEARCH & REPLACE bölümünde REGEXP desteğiyle de yapılabilir ...
  • 21-06-2010, 21:52:59
    #29
    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.