Com esta função é possível converter uma string contendo uma URL Codificada “URLEncoded” por uma URL Decodificada “URLDecoded“. Uma URL Decodificada é representada por caracteres da tabela US-ASCII.
As regras para a formação de uma URLDecoded são descritas no documento Internet Standards:
RFC 1738 – Uniform Resource Locators (URL)
A função URLDecode substitui todas as ocorrências do caractere ‘+’ por ‘ ‘ (espaço). A função também lê qualquer valor representado com um triplo hexadecimal, que consiste no caractere ‘%’ seguido de 2 dígitos hexadecimais, a função converte esses dígitos no caractere equivalente da tabela US-ASCII.
A função URLEncode já é nativa do ASP e pode ser encontrada no objeto Server, porém para Decodificar a URL é preciso utilizar uma função externa (como esta).
Veja um exemplo de como pode ser representado uma URL Codificada e como ficará após a utilização da função URLDecode.
Codificada:
http%3A%2F%2Fwww%2Ecodigofonte%2Ecom%2Ebr%2Fpagina%2Easp%3Fparametro1%3DC%F3digo+Fonte%26parametro2%3DO+melhor+conte%FAdo+para+programadores
Decodificada:
https://www.codigofonte.com.br/pagina.asp?parametro1=Código Fonte¶metro2=O melhor conteúdo para programadores
<% '----------------------------------------------------- 'Nome: URLDecode(ByVal Texto) 'Tipo: Funcao 'Sinopse: Faz um URL Decode em uma String 'Parametros: ' Texto: Texto com a URL 'Retorno: String 'Autor: Gabriel Fróes - www.codigofonte.com.br '----------------------------------------------------- Function URLDecode(ByVal Texto) On Error Resume Next 'Declarações Dim Posicao Dim Posicao2 Dim objStream Dim Retorno 'Substitui '+' por espaço Texto = Replace(Texto, "+", " ") '........................................... 'Utilizando ADODB.Stream (caso seja possível) '........................................... Set objStream = Server.CreateObject("ADODB.Stream") If Err = 0 Then On Error Goto 0 objStream.Type = 2 'String objStream.Open 'Substitui todos %(chars) pelos caracteres correspondentes Posicao = InStr(1, Texto, "%") Posicao2 = 1 Do While Posicao > 0 objStream.WriteText Mid(Texto, Posicao2, Posicao - Posicao2) + Chr(CLng("&H" & Mid(Texto, Posicao + 1, 2))) Posicao2 = Posicao + 3 Posicao = InStr(Posicao2, Texto, "%") Loop objStream.WriteText Mid(Texto, Posicao2) 'Lendo o texto do objeto stream objStream.Position = 0 Retorno = objStream.ReadText 'Libera o objeto objStream.Close 'Destruindo o objeto Set objStream = Nothing '........................................... 'Com este método a varredura dos dados é mais lenta e não é recomendável para 'strings com mais de 100kb. '........................................... Else On Error Goto 0 Posicao = InStr(1, Texto, "%") Do While Posicao>0 Texto = Left(Texto, Posicao - 1) + Chr(Clng("&H" & Mid(Texto, Posicao + 1, 2))) + Mid(Texto, Posicao + 3) Posicao = InStr(Posicao + 1, Texto, "%") Loop Retorno = Texto End If 'Retornando a função URLDecode = Retorno End Function %>