regex - asp - replace in vbscript
asp/vbscript clásico-modifique todos los hrefs con expresiones regulares (1)
En Classic ASP (VB Script), necesito modificar varios hrefs distintos que están contenidos en una cadena codificando la url actual y pendiente de ella.
Básicamente, quiero hacer que todos los hrefs pasen por mi redirect.asp y pasen el href existente codificado en el nuevo enlace.
Por ejemplo:
existente:
<a href="http://www.dairyqueen.com/us-en/Promotions-US/?localechange=1&test=1">
resultado deseado:
<a href="/redirect.asp?id=123&url=http%3A%2F%2Fwww.dairyqueen.com%2Fus-en%2FPromotions-US%2F%3Flocalechange%3D1%26test%3D1">
Tenga en cuenta que hay múltiples href distintos contenidos en la cadena. Todos ellos deben ser reemplazados.
Además, también me gustaría agregar atributos adicionales dentro del href, que probablemente podría hacer simplemente usando un replace(myString,"<a href","<a target=""_blank"" href=")
a menos que haya una mejor manera.
resultado óptimo:
<a target="_blank" href="/redirect.asp?id=123&url=http%3A%2F%2Fwww.dairyqueen.com%2Fus-en%2FPromotions-US%2F%3Flocalechange%3D1%26test%3D1">
Eche un vistazo al siguiente código:
'' <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