2016-09-28 40 views
2

在傳統的ASP(VB腳本)中,我需要修改一個字符串中包含的多個不同的hrefs,通過對當前url進行編碼並對其進行預先掛起。經典的asp/vbscript - 使用正則表達式修改所有的hrefs

基本上,我想讓所有的hrefs都通過我的redirect.asp並將現有的href傳遞到新的鏈接中。

例如:

現有:

<a href="http://www.dairyqueen.com/us-en/Promotions-US/?localechange=1&test=1"> 

期望的結果:

<a href="/redirect.asp?id=123&url=http%3A%2F%2Fwww.dairyqueen.com%2Fus-en%2FPromotions-US%2F%3Flocalechange%3D1%26test%3D1"> 

注意,有字符串中包含的多個不同的HREF。他們都需要更換。除此之外,我還想在href中添加其他屬性,除非有更好的方法,否則我可能只使用replace(myString,"<a href","<a target=""_blank"" href=")

最優結果:

<a target="_blank" href="/redirect.asp?id=123&url=http%3A%2F%2Fwww.dairyqueen.com%2Fus-en%2FPromotions-US%2F%3Flocalechange%3D1%26test%3D1"> 

回答

1

看看下面的代碼:

' <a href="http://www.dairyqueen.com/us-en/Promotions-US/?localechange=1&test=1"> 
sHtml = "<a href=""http://www.dairyqueen.com/us-en/Promotions-US/?localechange=1&test=1"">" 

Set refRepl = GetRef("fnRepl") 
With CreateObject("VBScript.RegExp") 
    .Global = True 
    .MultiLine = True 
    .IgnoreCase = True 
    .Pattern = "<a([\s\S]*?)href=""([\s\S]*?)""([\s\S]*?)>" 
    sResult = .Replace(sHtml, refRepl) 
End With 

' <a target="_blank" href="/redirect.asp?id=123&url=http%3A%2F%2Fwww.dairyqueen.com%2Fus-en%2FPromotions-US%2F%3Flocalechange%3D1%26test%3D1"> 
MsgBox sResult 

Function fnRepl(sMatch, sSubMatch1, sSubMatch2, sSubMatch3, lPos, sSource) 
    fnRepl = "<a" & sSubMatch1 & "target=""_blank"" href=""/redirect.asp?id=123&url=" & EncodeUriComponent(sSubMatch2) & """" & sSubMatch3 & ">" 
End Function 

Function EncodeUriComponent(sText) 
    With CreateObject("htmlfile") 
     .ParentWindow.ExecScript (";") 
     EncodeUriComponent = .ParentWindow.EncodeUriComponent(sText) 
    End With 
End Function