Scrivo questo articolo come integrazione dell’articolo Includere un sito esterno in un frameset con ASP per risolvere il problema della presenza della e-commerciale (&) nel link esterno in oggetto.
Il problema a cui alludo è il seguente:
go.asp?url=http://www.sito.it/pag.asp
Nessun problema: si finisce su pag.asp del sito esterno.
go.asp?url=http://www.sito.it/pag.asp?a=1
Nessun problema: si finisce su pag.asp del sito esterno coln una querystring valorizzata.
go.asp?url=http://www.sito.it/pag.asp?a=1&b=1
Ecco il problema!
La e-commerciale (&) fa parte della querystring del sito esterno, ma il browser (stupido) la interpreta come facente parte del file go.asp (interno) come secondo parametro dopo la specifica della URL di destinazione del sito interno.
La soluzione è semplice: filtrare il link, dalla posizione di partenza e non attraverso il redirect, con la il metodo Server.URLEncode come nell’esempio che segue:
go.asp?url=<%=Server.URLEncode("http://www.sito.it/pag.asp?a=1&b=1")%>
Il risultato, apparentemente indecifrabile, è il seguente:
go.asp?url=http%3A%2F%2Fwww%2Esito%2Eext%2Fpag%2Easp%3Fa%3D1%26b%3D1
ma il browser lo interpreterà correttamente e rimanderà il visitatore alla pagina di destinazione con tutte le querystring correttamente valorizzate!
