Quello che vuoi fare non credo che si possa fare semplicemente usando il metodo replace delle regular expression.
L'idea che viene a me in questo momento è di individuare con la RE quello che sta fuori dai tag html e poi ricostruire la stringa sostituendo i vari matches con l'htmlencode degli stessi.
Per comodità mi faccio una funzione per sostituire una porzione di stringa con un'altra stringa
codice:
Function ReplaceDaA(str,da,lunghezza,sostituzione)
ReplaceDaA=Mid(str,1,da)&sostituzione&Mid(str,da+lunghezza+1)
End Function
e la funzione che fa l'htmlencode di quello che sta fuori dai tag
codice:
Function HtmlEncodeFuoriTag(str)
dim re,strx,differenzaLunghezza,ris
differenzaLunghezza=0
strx=str
set re=Server.CreateObject("VBScript.RegExp")
re.Pattern="(^|>)([\s\S]*?)((<[\/a-zA-Z])|$)"
re.Global=true
re.Multiline=true
set ris=re.Execute(str)
for each rr in ris
strx=ReplaceDaA(strx,rr.FirstIndex+differenzaLunghezza,rr.Length,rr.submatches(0)&Server.HTMLEncode(rr.submatches(1))&rr.submatches(2))
differenzaLunghezza=differenzaLunghezza+Len(Server.HTMLEncode(rr.submatches(1)))-Len(rr.submatches(1))
next
HtmlEncodeFuoriTag=strx
End Function
per testare il tutto
codice:
<form method="post">
<textarea cols="100" rows="20" name="prova"><%=HtmlEncodeFuoriTag(Request.Form("prova"))%></textarea>
<input type="submit" value="prova">
</form>
<%=HtmlEncodeFuoriTag(Request.Form("prova"))%>
<hr color="red">
<%=Replace(Server.HTMLEncode(HtmlEncodeFuoriTag(Request.Form("prova"))),vbCrLf,"
")%>