前幾日我曾經(jīng)閱讀到一篇技術(shù)文章講述如何使用VBScript中的正則表達(dá)式對象來實現(xiàn)論壇里面的UBB功能,。VBScript提供的正則表達(dá)式對象功能非常強(qiáng)大,,但是只有5。5以上的腳本引擎才可以很好的支持正則表達(dá)式對象,,為了獲得版本是5,。5的腳本引擎,,你需要單獨安裝這個腳本引擎,或者安裝IE5.5,,也就是說對服務(wù)器的要求比較苛刻,,那就沒有其他的方法實現(xiàn)UBB功能了嗎?當(dāng)然不是了,,現(xiàn)在就跟隨我一同來使用普通的VBScript腳本語言來實現(xiàn)功能強(qiáng)大的UBB功能吧,。
先,在UBB功能中,,核心功能也即最吸引人的功能是完全支持貼圖功能和字體屬性的控制,。因為出于安全方面的原因,網(wǎng)絡(luò)上面的幾乎所有的論壇都盡可能的屏蔽掉了HTML代碼,,這樣可以避免人為的有意無意的對論壇的破壞,,這樣雖然保證了論壇自身的安全性,但是網(wǎng)友面對的貼子內(nèi)容就始終是一成不變的顏色,、字體,、大小,更不要奢望看到絢麗多彩的圖片了,。UBB代碼由此而生,,具體來說說我們?nèi)绾螌崿F(xiàn)以上的UBB核心功能。
下面我們先來詳細(xì)描述一下我們將要實現(xiàn)的UBB代碼的語法:
一,、支持貼圖的UBB語法
語法:[img]圖片路徑[/img]
實例:[img]http://www./logo.gif[/img]
描述:上面語法的結(jié)果就是在網(wǎng)頁上面顯示出來一幅圖片
二,、支持字體顏色的UBB語法:
語法:[red]文字[/red]
[green]文字[/green]
等等
實例:[blue]這是一段藍(lán)色的文字[/blue]
描述:上面的一段語法就是顯示一段藍(lán)顏色的文字
三、支持超級連接的UBB代碼
語法:連接地址
實例:http://www.
描述:上面的語法的結(jié)果就是生成一段超級連接,,當(dāng)你點擊的時候就會轉(zhuǎn)跳到連接的地址,!
四、支持Email地址的UBB語法
語法:你的email地址[/email]
實例:info@
描述:上面的代碼結(jié)果就是顯示一個郵件地址,,當(dāng)你用鼠標(biāo)點擊的時候,,就會自動打開發(fā)送電子郵件的軟件,并將地址寫上,。
五,、支持字體屬性的UBB語法
語法:一段文字等等
實例:一段粗體的文字
描述:上面代碼的結(jié)果就是顯示一段粗體的文字
好了,UBB代碼的核心功能就是上面的這些東西了,,當(dāng)然你還可以增加其他的種種功能因為這個UBB代碼的語法都是可以自定義的,。
在我們開始具體實現(xiàn)UBB功能之前,我們先來了解幾個重要的VBScript函數(shù):Instr函數(shù)和Replace函數(shù),。也許你看到這里忍不住想要說,,這也太簡單了吧,呵呵,,其實這兩個函數(shù)的確是我們在編程當(dāng)中使用比較頻繁的兩個函數(shù),,但是它也有自己的小秘密哦,,我們先來看看這兩個函數(shù)的具體
語法:
InStr函數(shù)
返回某字符串在另一字符串中第一次出現(xiàn)的位置。
InStr([start, ]string1, string2[, compare])
參數(shù)
start
可選項,。數(shù)值表達(dá)式,,用于設(shè)置每次搜索的開始位置。如果省略,,將從第一個字符的位置開始搜索,。如果start包含Null,則會出現(xiàn)錯誤,。如果已指定compare,,則必須要有start參數(shù)。
string1
必選項,。接受搜索的字符串表達(dá)式,。
string2
必選項。要搜索的字符串表達(dá)式,。
compare
可選項,。指示在計算子字符串時使用的比較類型的數(shù)值。有關(guān)數(shù)值,,請參閱"設(shè)置"部分,。如果省略,將執(zhí)行二進(jìn)制比較,。
設(shè)置
compare參數(shù)可以有以下值:
常數(shù)
值
描述
vbBinaryCompare
0
執(zhí)行二進(jìn)制比較,。
vbTextCompare
1
執(zhí)行文本比較。
返回值
InStr函數(shù)返回以下值:
如果
InStr返回
string1為零長度
0
string1為Null
Null
string2為零長度
start
string2為Null
Null
string2沒有找到
0
在string1中找到string2
找到匹配字符串的位置
start > Len(string2)
0
大家應(yīng)當(dāng)注意到了,,我們所要用的函數(shù)Instr的小秘密就是它的最后一個可選擇參數(shù)Compare,,因為我們的UBB代碼需要大小寫不敏感的,默認(rèn)的情況下,,函數(shù)Instr是要進(jìn)行二進(jìn)制匹配的,,也就是說是對大小寫敏感的,所以記住了,,這個Compare參數(shù)的值應(yīng)當(dāng)設(shè)置成為1才可以滿足我們的要求,。
Replace函數(shù)
返回字符串,其中指定數(shù)目的某子字符串被替換為另一個子字符串,。
Replace(expression, find, replacewith[, compare[, count[, start]]])
參數(shù)
expression
必選項,。字符串表達(dá)式包含要替代的子字符串。
Find
必選項,。被搜索的子字符串。
Replacewith
必選項,。用于替換的子字符串,。
Start
可選項,。expression中開始搜索子字符串的位置。如果省略,,默認(rèn)值為1,。在和count關(guān)聯(lián)時必須用
count
可選項。執(zhí)行子字符串替換的數(shù)目,。如果省略,,默認(rèn)值為-1,表示進(jìn)行所有可能的替換,。在和start關(guān)聯(lián)時必須用,。
Compare
可選項。指示在計算子字符串時使用的比較類型的數(shù)值,。有關(guān)數(shù)值,,請參閱"設(shè)置"部分。如果省略,缺省值為0 ,這意味著必須進(jìn)行二進(jìn)制比較,。
設(shè)置
compare參數(shù)可以有以下值:
常數(shù)
值
描述
vbBinaryCompare
0
執(zhí)行二進(jìn)制比較,。
vbTextCompare
1
執(zhí)行文本比較。
返回值
Replace返回以下值:
如果
Replace返回
expression為零長度
零長度字符串(""),。
expression為Null
錯誤,。
find為零長度
expression的副本。
replacewith為零長度
expression的副本,,其中刪除了所有由find參數(shù)指定的內(nèi)容,。
start > Len(expression)
零長度字符串。
count為0
expression的副本,。
這里我們應(yīng)當(dāng)注意的自然也是這個Replace的Compare可選擇參數(shù)了,,這樣我們在進(jìn)行UBB代碼全程替換的時候才可以保證對大小寫的不敏感。
其實,,實現(xiàn)UBB代碼的程序核心思想都是相同的,,實現(xiàn)了其中的一個,其他的也都是迎刃而解的了,。下面我們以比較困難并且有代表性的……語法的實現(xiàn)為例來詳細(xì)講解如何實現(xiàn)他:
首先,,我們可以分析出來,在一段文章當(dāng)中,,要實現(xiàn)這個功能,,其實也就是將形式為http://.xxx的字符串找出來,并且加以適當(dāng)?shù)奶鎿Q,,并且要全程替換,,也就是說,你要設(shè)法記住你的每一步所在的位置,,以便依次進(jìn)行替換,,下面就是實現(xiàn)這個UBB語法的函數(shù)代碼:(里面有詳細(xì)注釋)
Function LinkURLs(strInput)
Dim iCurrentLocation
Dim iLinkStart
Dim iLinkEnd
Dim strLinkText
Dim strOutPut
‘初始化變量
strLinkText=""
strOutput=""
iCurrentLocation=1
Do while Instr(iCurrentLocation,strInput,"開始位置
iLinkEnd=Instr(iCurrentLocation+1,strInput,"" TARGET=_blank>",1) ‘記錄下開始位置
iLinkEnd=Instr(iCurrentLocation+1,strInput,"",1) ‘記錄下結(jié)束位置
If iLinkEnd=0 then iLinkEnd=len(strINput)+1
select case Mid(strInput,iLinkEnd-1,1)
case ".","!","?"
iLinkEnd=iLinkEnd-1 ‘剔除多余標(biāo)點符號
end select
stroutput=strOutput&Mid(strInput,iCurrentLocation,iLinkStart
-iCurrentLocation)
strLinkText=replace(Mid(strInput,iLinkStart+5,iLinkEnd-iLinkStart
-5),"" TARGET=_blank>",1)<>0 ‘查找UBB語法字符串
iLinkStart=Instr(iCurrentLocation,strInput,"開始位置
iLinkEnd=Instr(iCurrentLocation+1,strInput,"",1) ‘記錄下結(jié)束位置
If iLinkEnd=0 then iLinkEnd=len(strINput)+1
select case Mid(strInput,iLinkEnd-1,1)
case ".","!","?"
iLinkEnd=iLinkEnd-1 ‘剔除多余標(biāo)點符號
end select
stroutput=strOutput&Mid(strInput,iCurrentLocation,iLinkStart-iCurrentLocation)
strLinkText=replace(Mid(strInput,iLinkStart+5,iLinkEnd-iLinkStart-5),"","")
strOutput=strOutput&""&strLinkText&""
iCurrentLocation=iLinkEnd ‘記錄下當(dāng)前游標(biāo)位置
Loop
strOutput=strOutput&Mid(strInput,iCurrentLocation)
LinkURLs=replace(strOutput,"[/url]","",1,-1,1)
End Function
好了,,通過上面的這個實現(xiàn)……功能的函數(shù),我們可以以此類推得到實現(xiàn)其他UBB語法的函數(shù),,限于篇幅,,我就不一一加以祥述了,你可以將這些函數(shù)放到一個文件中,,形成一個UBB代碼函數(shù)庫,,這樣就可以方便的在你的程序當(dāng)中加以引用了。
怎么樣,,通過我們自己的努力,,現(xiàn)在我們的論壇也可以完全支持UBB代碼功能了,我們的論壇現(xiàn)在也會變得色彩斑斕,,圖文并茂了,,也必將會吸引到更多的網(wǎng)友,:)
關(guān)于上面文章的實際應(yīng)用例子,,您可以在這里訪問到:Http://TechTop.Yeah.Net
(以上所有程序均在Windows9x/NT,,IIS/PWS,Access/SQL7上面運行通過)