<%
'*********************************************************
'文件名称: Ex_FilterHtmlCls.asp
'功能描述: 易心博客HTML处理类
'程序制作：易心
'官方网站: http://www.ex123.net
'论坛支持：http://bbs.ex123.net
'程序演示：http://exblog.ex123.net
'Copyright (C) 2007 ex123.net All rights reserved.
'LastUpdate:    2007-4-21
'*********************************************************
Class Ex_FilterHtmlCls
Dim re
Private Sub class_initialize
	Set re=new regexp
End Sub 
Private Sub clas_terminate
	Set re=Nothing 
End Sub 
'****************************************************
'清除html标记
'参数 str----要清除的字符串
'****************************************************
private Function cleanHtml(str)
	re.pattern="(\<)(.*?)(\>)"
	re.IgnoreCase =false
	re.Global=True
	str=re.Replace(str,"")
	cleanHtml=str
End Function
'************************************************
'判断是否存在没有闭合的标记  存在返回true 否则返回false
'参数：str 待判断的字符串
'************************************************
private function checktag(str)
	re.pattern="(\<)(.*?)(\>)"
	re.IgnoreCase =false
	re.Global=True
	str=re.Replace(str,"")
	if instr(str,"<")<>0 then
		checktag=true
	else
		checktag=false
	end if
end function
'**************************************************
'截取不闭合的部分(转变为ubb模式时用)
'参数:str--要处理的字符串
'**************************************************
Private function cutstr(str)
	dim i
	i=instr(str,"<")
	cutstr=left(str,i-1)
end function
'**************************************************
'把 img object embed p font br标记转化为ubb形式
'参数:str---待处理的字符串
'**************************************************
Private function html2ubb(str)
	re.ignorecase=true
	re.global=true
	re.pattern="\n"
	str=re.replace(str," ")
	re.pattern="\r"
	str=re.replace(str," ")
	re.pattern="(\<img)(.*?)(\>)"
	str=re.replace(str,"[img $2]")
	re.pattern="(\<object)(.*?)(\>)"
	str=re.replace(str,"[object $2]")
	re.pattern="<\/object>"
	str=re.replace(str,"[/object]")
	re.pattern="(\<embed)(.*?)(\>)"
	str=re.replace(str,"[embed $2]")
	re.pattern="<\/embed>"
	str=re.replace(str,"[/embed]")
	re.pattern="(\<font)(.*?)(\>)"
	str=re.replace(str,"[font $2]")
	re.pattern="<\/font>"
	str=re.replace(str,"[/font]")
	re.pattern="(\<p)(.*?)(\>)"
	str=re.replace(str,"[exp]")
	re.pattern="<\/p>"
	str=re.replace(str,"[/exp]")
	re.pattern="<br>"
	str=re.replace(str,"[br]")
	html2ubb=str
end function

'**************************************************
'把 img object embed p font br标记转化为html形式
'参数:str---待处理的字符串
'**************************************************
Private Function  ubb2html(str)
	re.ignorecase=true
	re.global=true
	re.pattern="\[img(.*?)\]"
	str=re.replace(str,"<img $1>")
	re.pattern="\[object(.*?)\]"
	str=re.replace(str,"<object $1>")
	re.pattern="\[\/object\]"
	str=re.replace(str,"</object>")
	re.pattern="\[embed(.*?)\]"
	str=re.replace(str,"<embed $1>")
	re.pattern="\[\/embed\]"
	str=re.replace(str,"</embed>")
	re.pattern="\[font(.*?)\]"
	str=re.replace(str,"<font $1>")
	re.pattern="\[\/font\]"
	str=re.replace(str,"</font>")
	re.pattern="\[exp\]"
	str=re.replace(str,"")
	re.pattern="\[\/exp\]"
	str=re.replace(str,"<br><br>")
	re.pattern="\[br\]"
	str=re.replace(str,"<br>")
	ubb2html=str
end function
'*******************************************
'检测某个字符串出现的次数
'str ---要检测的字符串 childstr---子字符串
'*******************************************
Private Function  checkcount(byval str,childstr)
	str=split(str,childstr)
	checkcount=ubound(str)
end function
'*******************************************
'img object embed p font标记匹配检测 清除不匹配的标记(html状态下用)
'str 要检测的字符串
'*******************************************
Private Function  checkpattern(byval str)
	dim temp,Font
	temp=str
	if checkcount(str,"<embed")<>checkcount(str,"</embed>") then
		temp=split(str,"<embed")
		str=replace(str,"<embed"&temp(ubound(temp)),"")
	end if
	if checkcount(str,"<object")<>checkcount(str,"</object>") then
		temp=split(str,"<object")
		str=replace(str,"<object"&temp(ubound(temp)),"")
	end if
	if checkcount(str,"<font")<>checkcount(str,"</font>") then
		temp=split(str,"<font")
		Font="<font"&temp(ubound(temp))
		If InStr(Font,">")<>0 And checkcount(Font,"<")=1 Then 
			str=replace(str,Font,Font&"</font>")
		Else
			Str=Replace(Str,Font,"")
		End If 
	end if
	checkpattern=str
end Function
Public Function GetHtml(ByVal str)
	str=html2ubb(str)
	if checktag(str)="True" then
		str=cutstr(str)
	end if
	str=ubb2html(str)
	GetHtml=checkpattern(str)
End Function 
End Class 
%>