用ASP實現論壇的UBB功能(二)
來源:互聯網
上載者:User
大家應當注意到了,我們所要用的函數Instr的小秘密就是它的最後一個可選擇參數Compare,因為我們的UBB代碼需要大小寫不敏感的,預設的情況下,函數Instr是要進行二進位匹配的,也就是說是對大小寫敏感的,所以記住了,這個
Compare參數的值應當設定成為1才可以滿足我們的要求。
Replace 函數
返回字串,其中指定數目的某子字串被替換為另一個子字串。
Replace(expression, find, replacewith[, compare[, count[, start]]])
參數
expression
必選項。字串運算式 包含要替代的子字串。
Find
必選項。被搜尋的子字串。
Replacewith
必選項。用於替換的子字串。
Start
可選項。expression 中開始搜尋子字串的位置。如果省略,預設值為 1。在和count 關聯時必須用
count
可選項。執行子字串替換的數目。如果省略,預設值為 -1,表示進行所有可能的替換。在和 start 關聯時必須
用。
Compare
可選項。指示在計運算元字串時使用的比較類型的數值。有關數值,請參閱"設定"部分。如果省略,預設值為 0 ,這意味著必須進行二進位比較。
設定
compare 參數可以有以下值:
常數
值
描述
vbBinaryCompare
0
執行二進位比較。
vbTextCompare
1
執行文本比較。
傳回值
Replace 返回以下值:
如果
Replace 返回
expression 為零長度
零長度字串 ("")。
expression 為 Null
錯誤。
find 為零長度
expression 的副本。
replacewith 為零長度
expression 的副本,其中刪除了所有由 find 參數指定的內容。
start > Len(expression)
零長度字串。
count 為 0
expression 的副本。
這裡我們應當注意的自然也是這個Replace的Compare可選擇參數了,這樣我們在進行UBB代碼全程替換的時候才可以保證對大小寫不敏感。
其實,實現UBB代碼的程式核心思想都是相同的,實現了其中的一個,其他的也都是迎刃而解的了。下面我們以比較困難並且有代表性的http://www.alixixi.com/program/a/……文法的實現為例來詳細講解如何?他:
首先,我們可以分析出來,在一段文章當中,要實現這個功能,其實也就是將形式為http://xxx.xxx.xxx的字串找出來,並且加以適當的替換,並且要全程替換,也就是說,你要設法記住你的每一步所在的位置,以便依次進行替換,下面就是實現這個UBB文法的函數代碼:(裡面有詳細注釋)
Function LinkURLs(strInput)
Dim iCurrentLocation
Dim iLinkStart
Dim iLinkEnd
Dim strLinkText
Dim strOutPut
'初始設定變數
strLinkText=""
strOutput=""
iCurrentLocation=1
Do while Instr(iCurrentLocation,strInput," iLinkStart=Instr(iCurrentLocation,strInput,"[url]",1) '記錄下開始位置
iLinkEnd=Instr(iCurrentLocation+1,strInput,"" target="_blank">",1)<>0 '尋找UBB文法字串
iLinkStart=Instr(iCurrentLocation,strInput,"[url]",1) '記錄下開始位置
iLinkEnd=Instr(iCurrentLocation+1,strInput,"",1) '記錄下結束位置
If iLinkEnd=0 then iLinkEnd=len(strINput)+1
select case Mid(strInput,iLinkEnd-1,1)
case ".","!","?"
iLinkEnd=iLinkEnd-1 '剔除多餘標點符號
end select
stroutput=strOutput & Mid(strInput,iCurrentLocation,iLinkStart-iCurrentLocation)
strLinkText=replace(Mid(strInput,iLinkStart+5,iLinkEnd-iLinkStart-5),"[/url]","")
strOutput=strOutput & "" & strLinkText & ""
iCurrentLocation=iLinkEnd '記錄下當前遊標位置
Loop
strOutput=strOutput & Mid(strInput,iCurrentLocation)
LinkURLs=replace(strOutput,"[/url]","",1,-1,1)
End Function
好了,通過上面的這個實現http://www.alixixi.com/program/a/……功能的函數,我們可以以此類推得到實現其他UBB文法的函數,限於篇幅,我就不一一加以祥述了,你可以將這些函數放到一個檔案中,形成一個UBB代碼函數庫,這樣就可以方便的在你的程式當中加以引用了。
怎麼樣,通過我們自己的努力,現在我們的論壇也可以完全支援UBB代碼功能了,我們的論壇現在也會變得色彩斑斕,圖文並茂了,也必將會吸引到更多的網友,:)
關於上面文章的實際應用例子,您可以在這裡訪問到: Http://TechTop.Yeah.Net
(以上所有程式均在Windows9x/NT,IIS/PWS,Access/SQL7上面運行通過)(北京 蘇紅超)