將html源代碼規(guī)范化,轉(zhuǎn)換成XSL代碼的asp工具
發(fā)表時(shí)間:2023-07-30 來(lái)源:明輝站整理相關(guān)軟件相關(guān)文章人氣:
[摘要]將下面的四個(gè)文件存在同一級(jí)目錄下,再在同目錄下建立一個(gè)文件txt.txt。當(dāng)要處理html代碼時(shí),先將源代碼拷入txt.txt,再進(jìn)入index_transform.asp,即可看到處理完的代碼。寫(xiě)...
將下面的四個(gè)文件存在同一級(jí)目錄下,再在同目錄下建立一個(gè)文件txt.txt。當(dāng)要處理html代碼時(shí),先將源代碼拷入txt.txt,再進(jìn)入index_transform.asp,
即可看到處理完的代碼。
寫(xiě)這個(gè)東西的本意是因?yàn)椋航?jīng)常要對(duì)美工用切圖軟件生成的網(wǎng)頁(yè)文件轉(zhuǎn)換成xsl,很頭疼要花大量的時(shí)間去改寫(xiě)不規(guī)范的html代碼。
這個(gè)東西對(duì)全文所有的html代碼進(jìn)行改動(dòng):
1.把所有標(biāo)記都變成小寫(xiě);
2.把標(biāo)簽的屬性值都加上雙引號(hào);
3.把單端標(biāo)簽<hr>、<img……>、<input……>等,改成<hr/>……;
4.把單獨(dú)屬性selected變成:selected="selected";
功能不完善之處:對(duì)html代碼中,屬性值內(nèi)包含空格的情況不能正常處理;
對(duì)<script>、<style>標(biāo)簽里的不能正常處理。
因?yàn)槭且钥崭駷闃?biāo)志將標(biāo)簽里的各個(gè)屬性值split成的數(shù)組,所以對(duì)屬性值中
包含空格的還沒(méi)做進(jìn)一步處理。
OK,耽誤大家時(shí)間了,看看這個(gè)東西能派上用場(chǎng)嗎?
圣誕快樂(lè)~! :)
==================================================
==================================================
'文件1:transform.asp◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎
<%
'*****************************************
'Author:小乙
'時(shí)間:2000.12.20
'功能:初步完成對(duì)要被轉(zhuǎn)換成XSL文件的:普通html代碼語(yǔ)法規(guī)范化的功能
'運(yùn)行環(huán)境:可運(yùn)行asp的機(jī)子。在同級(jí)目錄下把要處理的html代碼copy到
'txt.txt文件里。
'***************************************
'================================================================================================
''''''''''''''''''''''''''''''''【對(duì)全文所有html源代碼進(jìn)行語(yǔ)法規(guī)范化】''''''''''''''''''''''''''''
'在這個(gè)函數(shù)里,調(diào)用了另外一個(gè)主要函數(shù)alone_tag,來(lái)處理從中摘出來(lái)的單個(gè)標(biāo)簽。
Function transform(txt)
dim alltmp '定義此字符串變量,隨著被處理的大字符串減少而減短——只保留未處理的字符串部分。
alltmp=txt
alltmp=replace(alltmp," "," ") 'nbsp_tmp是替換掉文本中的字符實(shí)體&#nbsp;
'□■■■■■——進(jìn)入全文的處理htm源代碼的大處理循環(huán)——■■■■■□
do while trim(alltmp)<>""
'msgbox alltmp
index=0
index=InStr(1,alltmp,"<",1)
'根據(jù)index的值,判斷"<"前面是否有文本?有:加到txt1;無(wú):進(jìn)行標(biāo)簽處理(index=1)——即進(jìn)入標(biāo)簽處理分支
if index=1 then
index_right=InStr(1,alltmp,">",1)
tag=left(alltmp,index_right) '取出alltmp臨時(shí)串中">"前面的字符串
'對(duì)到這里的標(biāo)簽,判斷如果標(biāo)簽不是后端標(biāo)簽,就調(diào)用處理標(biāo)簽大函數(shù)alone_tag
if mid(tag,2,1)<>"/" then
tag1=alone_tag(tag)
'tag1=tag+",,,,, "
txt1=txt1+tag1
del_tag=len(tag)
else '否則對(duì)其它標(biāo)簽,就轉(zhuǎn)為小寫(xiě)后,簡(jiǎn)單的加在txt1后面
txt1=txt1+LCase(tag)
del_tag=len(tag)
end if
else
if index>1 then
str_tmp=left(alltmp,index-1)
txt1=txt1+str_tmp 'index<>1,說(shuō)明前面有文本。
del_tag=len(left(alltmp,index-1)) '把"<"前面的屬于文本的添加到新txt1大字符串中去。
end if
if index=0 then '當(dāng)再也找不到<時(shí)(到了末尾),把剩下的字符串全部加到txt1里,結(jié)束循環(huán)。
txt1=txt1+alltmp
del_tag=len(alltmp)
end if
end if
'把處理完的部分從原字符串中減掉
'response.write "alltmp="+alltmp
alltmp=right(alltmp,len(alltmp)-del_tag) '(如果標(biāo)簽長(zhǎng)大于等于2個(gè)字符)這里有問(wèn)題!12.14,下次再作!
loop
''□■■■■■——離開(kāi)全文的處理htm源代碼的大處理循環(huán)——■■■■■□
'transform=txt1
txt1=replace(txt1," ="""" "," ") '【這句是對(duì)付=""漏網(wǎng)之魚(yú) 2000.12.15
txt1=replace(txt1," >",">") '【這句是對(duì)付 > 2000.12.19
txt1=replace(txt1,"<tbody>","") '【這句是對(duì)付<tbody> 2000.12.19
transform=replace(txt1,"</tbody>","") '【這句是對(duì)付</tbody> 2000.12.19
End Function
''''''''''''''''''''''''''''''''【對(duì)全文所有html源代碼進(jìn)行語(yǔ)法規(guī)范化,結(jié)束】''''''''''''''''''''''''
%>
==================================================
==================================================
'文件2:index_transform.asp◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎
<%@ Language="VBScript" %>
<!-- #include file="transform.asp" -->
<!-- #include file="alone_tag.asp" -->
<%
'-------------------------------------本部分得到全文源代碼,開(kāi)始------------------------------------
dim txt '源文件中的文本
dim txt1 '經(jīng)過(guò)html語(yǔ)法規(guī)范化后的文件字符串。
dim tmpreadline '=thisfile.readline
txt="":txt1="":tmpReadAll=""
'取得源文件名稱,及所在路徑-------------
sourcefile="txt.txt"
sourcefile=Request.form("txtname")
'--------------------------新增部分,獲得上傳文本文件的內(nèi)容------------2000.12.15
'txt=request.form("filecontent")
'if len(txt)<>"" then
'response.write "---------------"
'end if
'response.end
'--------------------------新增部分結(jié)束------------2000.12.15
'-----------------------------------------------------【正式開(kāi)始操作文件】----------------------
whichfile=server.mappath("txt.txt")
'whichfile=server.mappath(sourcefile)
Set fs = CreateObject("Scripting.FileSystemObject")
Set thisfile = fs.OpenTextFile(whichfile, 1, False)
counter=0
tmpReadAll=thisfile.readall 'ReadAll是讀取全部文件內(nèi)容。
txt=tmpReadAll
txt1=transform(cstr(tmpReadAll))
txt=server.htmlencode(txt)+" 【文件內(nèi)容到此結(jié)束】"
'''''''''''''''''''''''''''''''''''''''''''''''''''''''
'如果要看打印出來(lái)長(zhǎng)字符串的效果,請(qǐng)取消上面這行注釋。
'-------------------------------------本部分得到全文源代碼,結(jié)束------------------------------------
%>
<%''''''''''''''''''''''''''''''【這里正式html頁(yè)面開(kāi)始】'''''''''''''''''''''''''''''''''''''''''%>
<html>
<head>
<title>倒數(shù)第二版</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
</head>
<body bgcolor="#BFA49a">
<form method="post" action="index_transform.asp" name="form1">
<table border="1" cellspacing="0" cellpadding="5" align="center" bgcolor="#99CCCC" bordercolor="#330066">
<tr>
<td>
<input type="text" name="txtname" value="txt.txt">
<input type="file" name="filecontent">
<input type="submit" name="Submit" value="提交">
<a href="#pagedown">到下面</a>
</td>
</tr>
</table>
</form> <br>
<!-------------------頁(yè)面表單2開(kāi)始(form2)--------------------->
<form method="post" action="trans2.asp" name="form2" enctype="multipart/form-data">
<table width="753" border="1" cellspacing="0" cellpadding="5" align="center" bgcolor="#99CCCC" bordercolor="#330066">
<tr bgcolor="#98AFE7" bordercolor="#FFCC99">
<td bordercolor="#FFFFFF">原文:</td>
<td bordercolor="#FFFFFF">處理后:</td>
</tr>
<tr>
<td>
<textarea name="txt" cols="50" rows="25" onFocus="this.select()" onclick="this.focus()">
<%=txt%>
</textarea>
</td>
<td>
<%''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''%>
<textarea name="txt" cols="50" rows="25" onFocus="this.select()" onclick="this.focus()">
<%=txt1%>
</textarea>
</td>
</tr>
</table>
<div id="Layer1" style="position:absolute; width:68px; height:35px; z-index:1; left: 349px; top: 411px; background-color: #E7E7E9; layer-background-color: #E7E7E9; border: 1px none #000000">
<div align="center">
<input type="submit" name="Submit2" value="提交">
<INPUT TYPE=button NAME="view" VALUE="看源碼" OnClick='window.location="view-source:" +window.location.href'>
</div>
</div>
</form>
<p> </p>
<br><a name="pagedown">
<hr size="1" align="center" width="90%" color="#88ff99">
<!-------以下是處理完的源代碼----------->
<%=txt1%>
<!-------處理完的源代碼到此為止------->
</body>
</html>
<%'釋放資源
Erase strtag1
Erase strtag2
Erase strtag3
thisfile.Close
set thisfile=nothing
set fs=nothing
%>
==================================================
==================================================
'文件3:alone_tag.asp◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎
<!-- #include file="func_flag.asp" -->
<%
'tag="<hr bgcolor=""#ccFFFF"" size=4568481,dfafd selected>"
'----------------------------進(jìn)入這里時(shí)應(yīng)該已經(jīng)得到一個(gè)完整的標(biāo)簽--------------------------------
'--------在此建立了一個(gè)大函數(shù)用來(lái)處理一個(gè)完整的標(biāo)簽里的屬性值。一直到頁(yè)面尾部為止。
function alone_tag(tag)
dim tag1 '定義處理完以后的標(biāo)簽,并在本函數(shù)末尾,將此值返還給alone_tag。
tag=LCase(tag) '將標(biāo)簽命名為tag,并且為了美觀,把所有字符串都改寫(xiě)成小寫(xiě)形式
'---------到此先準(zhǔn)備好標(biāo)簽的自身,以備后面拼回標(biāo)簽的時(shí)候使用(減一是因?yàn)楹竺嫫磳傩詴r(shí)把空格加上了)
dim tmpattri '此變量是臨時(shí)字符串,包含一個(gè)標(biāo)簽中的所有屬性值,利用它來(lái)求“屬性數(shù)組:attribute”
index=InStr(1,tag," ",1)
tmpattri=right(tag,len(tag)-index) '除去左側(cè)標(biāo)簽
if len(tmpattri)>1 then
tmpattri=trim(left(tmpattri,len(tmpattri)-1)) '除去右側(cè)">",并去除兩端空格(如果標(biāo)簽長(zhǎng)大于等于2個(gè)字符)
end if
tmpattri=replace(tmpattri,chr(13)," ") '對(duì)源碼中,一個(gè)標(biāo)簽不在一行里的情況,尚等待另行考慮處理。
tmpattri=replace(tmpattri,chr(10)," ")
tmpattri=replace(tmpattri,chr(10)&chr(13)," ")
tmpattri=replace(tmpattri," "," ") '【這兩句是對(duì)付當(dāng)屬性串里有多個(gè)空格的時(shí)候,
tmpattri=replace(tmpattri," "," ") '【替換成一個(gè)空格,不過(guò)只能處理不超過(guò)16個(gè)空格的情況。
tmpattri=replace(tmpattri," "," ")
tmpattri=replace(tmpattri," "," ")
tmpattri=replace(tmpattri," "," ")
tmpattri=replace(tmpattri," "," ")
tmpattri=replace(tmpattri," "," ")
attribute=Split(tmpattri, " ", -1, 1) '新定義一個(gè)數(shù)組,是專為裝載屬性值而設(shè)的。Dim attribute
'msgbox "這里得到準(zhǔn)備拆分屬性數(shù)組的長(zhǎng)字符串: "+tmpattri
'--------------------到這里已經(jīng)得到一個(gè)關(guān)于屬性值的數(shù)組:attribute-------------------------------
'--------『這個(gè)循環(huán)是處理上面處理完畢的屬性值字符數(shù)組(attribute)的』-------------------
'flag=0:說(shuō)明單個(gè)屬性有等于號(hào),且有雙引號(hào)——語(yǔ)法正常,后面對(duì)此標(biāo)志忽略。 (例:width="325")
'flag=1:說(shuō)明單個(gè)屬性有等于號(hào),且沒(méi)有雙引號(hào)——需要處理,對(duì)語(yǔ)法規(guī)范化 (例:width=325)
'flag=2:說(shuō)明單個(gè)屬性沒(méi)有等于號(hào)(例:selected)
'flag=3:說(shuō)明是單端標(biāo)簽,(例:<hr width="80%" size="1">)此語(yǔ)句在前面設(shè)標(biāo)志,并進(jìn)行處理
For count=0 to UBound(attribute, 1) '一個(gè)元素的屬性不多.
If InStr(1,attribute(count),"=",1)=0 Then
flag=2 '單個(gè)屬性串中沒(méi)找到等于號(hào)。(例:selected)
Else
IF InStr(1,attribute(count),"""",1)=0 Then
flag=1 '單個(gè)屬性串中沒(méi)找到等于號(hào)。(例:width=325)
Else
flag=0 '單個(gè)屬性串找到了等于號(hào)。(例:width="325")
IF InStr(1,attribute(count),"""",1)>0 Then
'attribute(count)=attribute(count)+attribute(count+1)
'attribute(count+1)="" '這兩句是說(shuō),把下一個(gè)屬性串的賦給它,把下一個(gè)屬性串置為零。
flag=4 '單個(gè)屬性串找到了等于號(hào),并且包含分號(hào)。(例:content="text/html; charset=gb2312")
End IF
End If
End If
'------------------對(duì)屬性數(shù)組,根據(jù)上面打的不同標(biāo)志來(lái)調(diào)用不同函數(shù)進(jìn)行處理--------------
Select case flag
case 0 attribute(count)=attribute(count)
case 1 attribute(count)=func_flag1(attribute(count)) '調(diào)用函數(shù)func_flag1處理。(例:width=325)
case 2 attribute(count)=func_flag2(attribute(count)) '調(diào)用函數(shù)func_flag2處理。(例:selected)
case 3 attribute(count)=func_flag3(attribute(count)) '調(diào)用函數(shù)func_flag3處理單端標(biāo)簽(例:<img…)
case 4 attribute(count)=(attribute(count)) '另行處理屬性串之間包含分號(hào)、空格的情況
End Select
Next
count=0
for count=0 to UBound(attribute, 1)
attribute_tmp=attribute_tmp+" "+attribute(count) '屬性值之間要有空格
next
'----------到這里已經(jīng)把各個(gè)符合屬性值規(guī)范的屬性拼成一個(gè)串a(chǎn)ttribute_tmp,下面進(jìn)行拼標(biāo)簽------
index=InStr(1,tag," ",1)
if InStr(1,tag," ",1)=0 and len(tag)<>"" then '當(dāng)空格沒(méi)找到(意味著是空屬性值標(biāo)簽),且沒(méi)有到末尾時(shí)。
tag1=Replace(tag,">"," >") '在此類標(biāo)簽(例<hr>)后尾加上一個(gè)空格
else
tag_self=left(tag,index-1)
'拼標(biāo)簽與屬性串。
tag1=tag_self+attribute_tmp+">"
end if
'msgbox "tag_self"+tag_self
'msgbox "(要輸出的標(biāo)簽串)tag1ssssssssssss:"+tag1
'-----------------到這里已經(jīng)得到一個(gè)屬性值規(guī)范的標(biāo)簽,但要開(kāi)始對(duì)單端標(biāo)簽進(jìn)行處理------------
'----替換單端標(biāo)簽--------
'count=0
for count=0 to UBound(strtag3,1)
if InStr(1,tag1,strtag3(count),1)<>0 then '這里利用到前面已切分好的屬性標(biāo)簽
tag1=func_flag3(tag1) '對(duì)付單端標(biāo)簽——flag=3(例:<img…)
end if
next
'-----------------到這里已經(jīng)得到一個(gè)完全語(yǔ)法規(guī)范化的標(biāo)簽。單端標(biāo)簽處理完畢------------
alone_tag=tag1
end function
'<SCRIPT LANGUAGE="javaScript">
'<!--
'tag='<%=alone_tag(tag)% >'
'alert (tag)
'//-->
'</SCRIPT>
%>
==================================================
==================================================
'文件4:func_flag.asp◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎◎
<%
strtag_source1="<html ,<body ,<table ,<td ,<tr ,<option ,<font ,<div ,<span ,<h1 ,<h2 ,<form "
strtag1 = Split(strtag_source1, ",", -1, 1)
strattri_source2="selected,checked,norwap,readonly,noshade" '單獨(dú)屬性
strtag2 = Split(strattri_source2, ",", -1, 1)
strtag_source3="<input ,<img ,<hr ,<br ,<meta" '單端標(biāo)簽
strtag3 = Split(strtag_source3, ",", -1, 1)
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
'-------------------以下是處理flag值的多個(gè)函數(shù)---------【保留】----開(kāi)始
function func_flag1(tmp)'處理單個(gè)屬性:(例:width=325)
index=InStr(1,tmp,"=",1)
z1=left(tmp,index)
z2=""""
z3=mid(tmp,index+1,len(tmp)-len(z1))
func_flag1=z1+z2+z3+z2
end function
function func_flag2(tmp)'(例:selected)
func_flag2=tmp+"="+""""+tmp+""""
end function
function func_flag3(tmp)'處理單端標(biāo)簽(例:<img…)
func_flag3=replace(cstr(tmp),">","/>")
end function
'-------------------以上是處理flag值的多個(gè)函數(shù)---------【保留】----結(jié)束
''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''''
%>