elhacker.net cabecera Bienvenido(a), Visitante. Por favor Ingresar o Registrarse
¿Perdiste tu email de activación?.

 

 


Tema destacado: Únete al Grupo Steam elhacker.NET


+  Foro de elhacker.net
|-+  Programación
| |-+  Programación General
| | |-+  .NET (C#, VB.NET, ASP)
| | | |-+  Programación Visual Basic (Moderadores: LeandroA, seba123neo)
| | | | |-+  [Reto] UrlEncode y UrlDecode
0 Usuarios y 1 Visitante están viendo este tema.
Páginas: 1 [2] Ir Abajo Respuesta Imprimir
Autor Tema: [Reto] UrlEncode y UrlDecode  (Leído 6,950 veces)
cobein


Desconectado Desconectado

Mensajes: 759



Ver Perfil WWW
Re: [Reto] UrlEncode y UrlDecode
« Respuesta #10 en: 21 Diciembre 2012, 13:42 pm »

Bueno ahi esta con APIs, lo unico que vi que no es igual a lo que pedis es que las barras en los parametros no las codifica... no se, en teoria codifica lo necesario segun M$.

Código
  1. '---------------------------------------------------------------------------------------
  2. ' Module      : mUrlEncode
  3. ' DateTime    : 21/12/2012 - Fin del Mundo!
  4. ' Author      : Cobein
  5. ' Mail        : cobein27@hotmail.com
  6. ' Purpose     : Encode and Decode url parameters
  7. ' Requirements: None
  8. ' Distribution: You can freely use this code in your own
  9. '               applications, but you may not reproduce
  10. '               or publish this code on any web site,
  11. '               online service, or distribute as source
  12. '               on any media without express permission.
  13. '---------------------------------------------------------------------------------------
  14. Option Explicit
  15.  
  16. Private Const ICU_ESCAPE                    As Long = &H80000000
  17. Private Const ICU_DECODE                    As Long = &H10000000
  18. Private Const CP_UTF8                       As Long = 65001
  19. Private Const ICU_BROWSER_MODE              As Long = &H2000000
  20.  
  21. Private Type URL_COMPONENTS
  22.    StructSize          As Long
  23.    Scheme              As String
  24.    SchemeLength        As Long
  25.    nScheme             As Long
  26.    HostName            As String
  27.    HostNameLength      As Long
  28.    nPort               As Long
  29.    UserName            As String
  30.    UserNameLength      As Long
  31.    Password            As String
  32.    PasswordLength      As Long
  33.    URLPath             As String
  34.    UrlPathLength       As Long
  35.    ExtraInfo           As String
  36.    ExtraInfoLength     As Long
  37. End Type
  38.  
  39. Private Declare Function InternetCrackUrl Lib "wininet.dll" Alias "InternetCrackUrlA" (ByVal lpszUrl As String, ByVal dwUrlLength As Long, ByVal dwFlags As Long, lpUrlComponents As URL_COMPONENTS) As Long
  40. Private Declare Function InternetCanonicalizeUrl Lib "wininet.dll" Alias "InternetCanonicalizeUrlA" (ByVal lpszUrl As String, ByVal lpszBuffer As String, lpdwBufferLength As Long, ByVal dwFlags As Long) As Long
  41. Private Declare Function InternetCreateUrl Lib "wininet.dll" Alias "InternetCreateUrlA" (lpUrlComponents As URL_COMPONENTS, ByVal dwFlags As Long, ByVal lpszUrl As String, lpdwUrlLength As Long) As Long
  42. Private Declare Function WideCharToMultiByte Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long
  43. Private Declare Function MultiByteToWideChar Lib "kernel32" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
  44. Private Declare Function lstrlen Lib "kernel32" Alias "lstrlenA" (ByVal lpString As String) As Long
  45.  
  46. Public Function URLDecode(ByVal sURL As String, _
  47.       Optional ByVal bEncodeSpace As Boolean = False, _
  48.       Optional ByVal bUTF8 As Boolean = True) As String
  49.  
  50.    Dim tURL_COMPONENTS As URL_COMPONENTS
  51.  
  52.    Call CrackUrl(sURL, tURL_COMPONENTS)
  53.  
  54.    If bEncodeSpace Then
  55.        tURL_COMPONENTS.ExtraInfo = Replace(tURL_COMPONENTS.ExtraInfo, "+", " ")
  56.    End If
  57.  
  58.    URLDecode = CreateUrl(tURL_COMPONENTS, False)
  59.  
  60.    If bUTF8 Then
  61.        URLDecode = UTF82Unicode(URLDecode)
  62.    End If
  63. End Function
  64.  
  65. Public Function URLEncode(ByVal sURL As String, _
  66.       Optional ByVal bEncodeSpace As Boolean = False, _
  67.       Optional ByVal bUTF8 As Boolean = True) As String
  68.  
  69.    Dim tURL_COMPONENTS As URL_COMPONENTS
  70.  
  71.    If bUTF8 Then
  72.        sURL = Unicode2UTF8(sURL)
  73.    End If
  74.  
  75.    Call CrackUrl(sURL, tURL_COMPONENTS)
  76.  
  77.    URLEncode = CreateUrl(tURL_COMPONENTS, True)
  78.  
  79.    If bEncodeSpace Then
  80.        URLEncode = Replace(URLEncode, "%20", "+")
  81.    End If
  82. End Function
  83.  
  84. Private Function CreateUrl(ByRef tURL_COMPONENTS As URL_COMPONENTS, ByVal bEscape As Boolean) As String
  85.    Dim sBuffer As String
  86.  
  87.    sBuffer = String$(2048, 0)
  88.  
  89.    tURL_COMPONENTS.StructSize = Len(tURL_COMPONENTS)
  90.  
  91.    If InternetCreateUrl(tURL_COMPONENTS, IIf(bEscape, ICU_ESCAPE, 0), sBuffer, 2048) Then
  92.        CreateUrl = Left$(sBuffer, lstrlen(sBuffer))
  93.    End If
  94. End Function
  95.  
  96. Private Sub CrackUrl(ByVal sURL As String, ByRef tURL_COMPONENTS As URL_COMPONENTS)
  97.    Dim sBuffer As String
  98.    Dim lSize   As Long
  99.  
  100.    lSize = 2048
  101.    sBuffer = Space$(lSize)
  102.  
  103.    If InternetCanonicalizeUrl(sURL, sBuffer, lSize, ICU_BROWSER_MODE) Then
  104.  
  105.        sURL = Left$(sBuffer, lstrlen(sBuffer))
  106.  
  107.        With tURL_COMPONENTS
  108.            .StructSize = Len(tURL_COMPONENTS)
  109.            .Scheme = Space$(lSize)
  110.            .SchemeLength = lSize
  111.            .HostName = Space$(lSize)
  112.            .HostNameLength = lSize
  113.            .UserName = Space$(lSize)
  114.            .UserNameLength = lSize
  115.            .Password = Space$(lSize)
  116.            .PasswordLength = lSize
  117.            .URLPath = Space$(lSize)
  118.            .UrlPathLength = lSize
  119.            .ExtraInfo = Space$(lSize)
  120.            .ExtraInfoLength = lSize
  121.        End With
  122.  
  123.        Call InternetCrackUrl(sURL, Len(sURL), ICU_DECODE, tURL_COMPONENTS)
  124.    End If
  125. End Sub
  126.  
  127. Private Function UTF82Unicode(ByVal sData As String) As String
  128.    Dim lRet    As Long
  129.    Dim sBuffer As String
  130.  
  131.    sBuffer = Space(Len(sData))
  132.  
  133.    lRet = MultiByteToWideChar(CP_UTF8, 0, _
  134.       StrPtr(StrConv(sData, vbFromUnicode)), Len(sData), _
  135.       StrPtr(sBuffer), Len(sData))
  136.  
  137.    If lRet Then
  138.        UTF82Unicode = Left$(sBuffer, lRet)
  139.    End If
  140. End Function
  141.  
  142. Private Function Unicode2UTF8(ByVal sData As String) As String
  143.    Dim lRet    As Long
  144.    Dim sBuffer As String
  145.  
  146.    sBuffer = Space(LenB(sData))
  147.  
  148.    lRet = WideCharToMultiByte(CP_UTF8, 0, _
  149.       StrPtr(sData), Len(sData), _
  150.       StrPtr(sBuffer), Len(sBuffer), _
  151.       vbNullString, 0)
  152.  
  153.    If lRet Then
  154.        sBuffer = StrConv(sBuffer, vbUnicode)
  155.        Unicode2UTF8 = Left$(sBuffer, lRet)
  156.    End If
  157. End Function
  158.  
  159.  


« Última modificación: 21 Diciembre 2012, 13:44 pm por cobein » En línea

http://www.advancevb.com.ar
Más Argentino que el morcipan
Aguante el Uvita tinto, Tigre, Ford y seba123neo
Karcrack es un capo.
Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [Reto] UrlEncode y UrlDecode
« Respuesta #11 en: 22 Diciembre 2012, 02:10 am »

Bueno, aquí dejo mi forma de hacerlo. :)
Lo he planteado de una manera un poco diferente y es bastante rápido. Aún así, quizás se podría agilizar aún más con algo de magia negra, pero como la cadena de la url va a ser relativamente corta supongo que no habrá una diferencia muy notable. :silbar:
Si veis cosas a añadir o a mejorar decirlo, aunque creo que se adapta a lo que pide LeandroA en el primer post. ;)



Módulo:
Código
  1. Option Explicit
  2. '============================================================================
  3. ' º Module     : mFastUrlEncode.bas
  4. ' º Author     : Psyke1
  5. ' º Mail       : psyke1@elhacker.net
  6. ' º Date       : 22/12/2012
  7. ' º Recommended Websites :
  8. '       http://foro.h-sec.org
  9. '       http://infrangelux.sytes.net
  10. '============================================================================
  11.  
  12. '// msvbvm60.dll
  13. Private Declare Sub PutMem4 Lib "msvbvm60.dll" (ByVal Ptr As Long, ByVal Value As Long)
  14.  
  15. '// oleaut32.dll
  16. Private Declare Function SysAllocStringByteLen Lib "oleaut32.dll" (ByVal Ptr As Long, ByVal Length As Long) As Long
  17.  
  18. '// kernel32.dll
  19. Private Declare Function WideCharToMultiByte Lib "kernel32.dll" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpDefaultChar As String, ByVal lpUsedDefaultChar As Long) As Long
  20. Private Declare Function MultiByteToWideChar Lib "kernel32.dll" (ByVal CodePage As Long, ByVal dwFlags As Long, ByVal lpMultiByteStr As Long, ByVal cchMultiByte As Long, ByVal lpWideCharStr As Long, ByVal cchWideChar As Long) As Long
  21.  
  22. Private Const CP_UTF8                           As Long = &HFDE9&
  23. Private Const STR_VALID_CHARS                   As String = "QWERTYUIOPASDFGHJKLZXCVBNMqwertyuiopasdfghjklzxcvbnm1234567890-_.:~%&="
  24.  
  25. Public Static Function URLEncode(ByVal sUrl As String, _
  26.                                 Optional ByVal bSpacePlus As Boolean, _
  27.                                 Optional ByVal bUTF8 As Boolean = True) As String
  28.  
  29. Dim Q                                           As Long
  30. Dim sHex                                        As String
  31. Dim sChr                                        As String * &H1
  32. Dim lRet                                        As Long
  33. Dim lLen                                        As Long
  34. Dim lStart                                      As Long
  35. Dim sBuffer                                     As String
  36.  
  37.    lLen = LenB(sUrl)
  38.    If lLen Then
  39.        lStart = InStrB(&H1, sUrl, "=", vbBinaryCompare) - &H1
  40.  
  41.        If lStart > -&H1 Then
  42.            lRet = lLen - lStart
  43.            URLEncode = RightB$(sUrl, lRet)
  44.  
  45.            If bUTF8 Then
  46.                PutMem4 VarPtr(sBuffer), SysAllocStringByteLen(&H0, (lRet + lRet))
  47.  
  48.                lRet = WideCharToMultiByte(CP_UTF8, &H0, _
  49.                                           StrPtr(URLEncode), (lRet \ &H2), _
  50.                                           StrPtr(sBuffer), lRet, _
  51.                                           vbNullString, &H0)
  52.  
  53.                URLEncode = LeftB$(StrConv(sBuffer, vbUnicode), (lRet + lRet))
  54.            End If
  55.  
  56.            Q = &H3
  57.  
  58.            Do While Q < lLen
  59.                sChr = MidB$(URLEncode, Q, &H2)
  60.  
  61.                If sChr = "%" Then
  62.                    Q = Q + &H6
  63.                ElseIf InStrB(&H1, STR_VALID_CHARS, sChr, vbBinaryCompare) = &H0 Then
  64.                    sHex = Hex$(AscW(sChr))
  65.                    If LenB(sHex) < &H4 Then sHex = "0" & sHex
  66.  
  67.                    URLEncode = Replace$(URLEncode, sChr, ("%" & sHex), , , vbBinaryCompare)
  68.  
  69.                    lLen = LenB(URLEncode)
  70.                    Q = Q + &H6
  71.                Else
  72.                    Q = Q + &H2
  73.                End If
  74.            Loop
  75.  
  76.            If bSpacePlus Then
  77.                URLEncode = Replace$(URLEncode, "%20", "+", , , vbBinaryCompare)
  78.            End If
  79.  
  80.            URLEncode = (LeftB$(sUrl, lStart) & URLEncode)
  81.        Else
  82.            URLEncode = sUrl
  83.        End If
  84.    End If
  85. End Function
  86.  
  87. Public Static Function URLDecode(ByVal sUrl As String, _
  88.                                 Optional ByVal bSpacePlus As Boolean, _
  89.                                 Optional ByVal bUTF8 As Boolean = True) As String
  90.  
  91. Dim sHex                                        As String
  92. Dim lPos                                        As Long
  93. Dim lLen                                        As Long
  94. Dim lStart                                      As Long
  95. Dim sBuffer                                     As String
  96.  
  97.    If LenB(sUrl) Then
  98.        lStart = InStrB(&H1, sUrl, "=", vbBinaryCompare) + &H2
  99.        URLDecode = sUrl
  100.  
  101.        If lStart > &H2 Then
  102.            lPos = InStrB(lStart, URLDecode, "%", vbBinaryCompare)
  103.  
  104.            Do While lPos
  105.                lPos = lPos + &H2
  106.                sHex = MidB$(URLDecode, lPos, &H4)
  107.                If LenB(sHex) = &H0 Then Exit Do
  108.  
  109.                URLDecode = Replace$(URLDecode, ("%" & sHex), ChrW$("&H" & sHex), , , vbBinaryCompare)
  110.                lPos = InStrB(lPos, URLDecode, "%", vbBinaryCompare)
  111.            Loop
  112.  
  113.            If bSpacePlus Then
  114.                URLDecode = Replace$(URLDecode, "+", " ", , , vbBinaryCompare)
  115.            End If
  116.  
  117.            If bUTF8 Then
  118.                lLen = LenB(URLDecode) \ &H2
  119.                PutMem4 VarPtr(sBuffer), SysAllocStringByteLen(&H0, lLen + lLen)
  120.  
  121.                lLen = MultiByteToWideChar(CP_UTF8, &H0, _
  122.                       StrPtr(StrConv(URLDecode, vbFromUnicode)), lLen, _
  123.                       StrPtr(sBuffer), lLen)
  124.  
  125.                URLDecode = LeftB$(sBuffer, (lLen + lLen))
  126.            End If
  127.        End If
  128.    End If
  129. End Function
  130.  



Pruebas:
Código
  1. Option Explicit
  2.  
  3. Private Sub Form_Load()
  4. Dim vURL                                    As Variant
  5. Dim vArr()                                  As Variant
  6. Dim sEncodedURL                             As String
  7.  
  8.    vArr() = Array("https://www.google.com.ar/search?q=canción del caballo", _
  9.                   "http://www.taringa.net/buscar/?q=día 12/12/12&interval=", _
  10.                   "https://login.live.com/login.srf?wa=wsignin1.0&rpsnv=11&ct=1312101221&rver=6.1.6206.0&wp=MBI&wreply=http://mail.live.com/default.aspx&lc=2058&id=64855&mkt=es-US&cbcxt=mai&snsc=1", _
  11.                   "https://www.google.com.ar/search?q=casa duplex&num=10&hl=es&safe=off&biw=1680&bih=925&sa=X&ei=mS7RUIqvHYjW8gSA9oHABg&ved=0CBkQpwUoAw&source=lnt&tbs=cdr:1,cd_min:5/12/2012,cd_max:18/12/2012&tbm=isch")
  12.  
  13.    Debug.Print
  14.    Debug.Print String$(15, "-"); Time$; String$(227, "-")
  15.  
  16.    For Each vURL In vArr
  17.        Debug.Print String$(250, "=")
  18.        Debug.Print "Original :", vURL
  19.  
  20.        sEncodedURL = URLEncode(vURL)
  21.        Debug.Print "Enc&Dec  :", URLDecode(sEncodedURL)
  22.        Debug.Print "Enc      :", sEncodedURL
  23.  
  24.        sEncodedURL = URLEncode(vURL, True)
  25.        Debug.Print "Enc&Dec+ :", URLDecode(sEncodedURL, True)
  26.        Debug.Print "Enc+     :", sEncodedURL
  27.    Next vURL
  28.  
  29.    Debug.Print String$(250, "=")
  30. End Sub



Resultado:
Código:
---------------01:55:53-----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
==========================================================================================================================================================================================================================================================
Original :    https://www.google.com.ar/search?q=canción del caballo
Enc&Dec  :    https://www.google.com.ar/search?q=canción del caballo
Enc      :    https://www.google.com.ar/search?q=canci%C3%B3n%20del%20caballo
Enc&Dec+ :    https://www.google.com.ar/search?q=canción del caballo
Enc+     :    https://www.google.com.ar/search?q=canci%C3%B3n+del+caballo
==========================================================================================================================================================================================================================================================
Original :    http://www.taringa.net/buscar/?q=día 12/12/12&interval=
Enc&Dec  :    http://www.taringa.net/buscar/?q=día 12/12/12&interval=
Enc      :    http://www.taringa.net/buscar/?q=d%C3%ADa%2012%2F12%2F12&interval=
Enc&Dec+ :    http://www.taringa.net/buscar/?q=día 12/12/12&interval=
Enc+     :    http://www.taringa.net/buscar/?q=d%C3%ADa+12%2F12%2F12&interval=
==========================================================================================================================================================================================================================================================
Original :    https://login.live.com/login.srf?wa=wsignin1.0&rpsnv=11&ct=1312101221&rver=6.1.6206.0&wp=MBI&wreply=http://mail.live.com/default.aspx&lc=2058&id=64855&mkt=es-US&cbcxt=mai&snsc=1
Enc&Dec  :    https://login.live.com/login.srf?wa=wsignin1.0&rpsnv=11&ct=1312101221&rver=6.1.6206.0&wp=MBI&wreply=http://mail.live.com/default.aspx&lc=2058&id=64855&mkt=es-US&cbcxt=mai&snsc=1
Enc      :    https://login.live.com/login.srf?wa=wsignin1.0&rpsnv=11&ct=1312101221&rver=6.1.6206.0&wp=MBI&wreply=http%3A%2F%2Fmail.live.com%2Fdefault.aspx&lc=2058&id=64855&mkt=es-US&cbcxt=mai&snsc=1
Enc&Dec+ :    https://login.live.com/login.srf?wa=wsignin1.0&rpsnv=11&ct=1312101221&rver=6.1.6206.0&wp=MBI&wreply=http://mail.live.com/default.aspx&lc=2058&id=64855&mkt=es-US&cbcxt=mai&snsc=1
Enc+     :    https://login.live.com/login.srf?wa=wsignin1.0&rpsnv=11&ct=1312101221&rver=6.1.6206.0&wp=MBI&wreply=http%3A%2F%2Fmail.live.com%2Fdefault.aspx&lc=2058&id=64855&mkt=es-US&cbcxt=mai&snsc=1
==========================================================================================================================================================================================================================================================
Original :    https://www.google.com.ar/search?q=casa duplex&num=10&hl=es&safe=off&biw=1680&bih=925&sa=X&ei=mS7RUIqvHYjW8gSA9oHABg&ved=0CBkQpwUoAw&source=lnt&tbs=cdr:1,cd_min:5/12/2012,cd_max:18/12/2012&tbm=isch
Enc&Dec  :    https://www.google.com.ar/search?q=casa duplex&num=10&hl=es&safe=off&biw=1680&bih=925&sa=X&ei=mS7RUIqvHYjW8gSA9oHABg&ved=0CBkQpwUoAw&source=lnt&tbs=cdr:1,cd_min:5/12/2012,cd_max:18/12/2012&tbm=isch
Enc      :    https://www.google.com.ar/search?q=casa%20duplex&num=10&hl=es&safe=off&biw=1680&bih=925&sa=X&ei=mS7RUIqvHYjW8gSA9oHABg&ved=0CBkQpwUoAw&source=lnt&tbs=cdr%3A1%2Ccd_min%3A5%2F12%2F2012%2Ccd_max%3A18%2F12%2F2012&tbm=isch
Enc&Dec+ :    https://www.google.com.ar/search?q=casa duplex&num=10&hl=es&safe=off&biw=1680&bih=925&sa=X&ei=mS7RUIqvHYjW8gSA9oHABg&ved=0CBkQpwUoAw&source=lnt&tbs=cdr:1,cd_min:5/12/2012,cd_max:18/12/2012&tbm=isch
Enc+     :    https://www.google.com.ar/search?q=casa+duplex&num=10&hl=es&safe=off&biw=1680&bih=925&sa=X&ei=mS7RUIqvHYjW8gSA9oHABg&ved=0CBkQpwUoAw&source=lnt&tbs=cdr%3A1%2Ccd_min%3A5%2F12%2F2012%2Ccd_max%3A18%2F12%2F2012&tbm=isch
==========================================================================================================================================================================================================================================================

DoEvents! :P


« Última modificación: 24 Diciembre 2012, 16:58 pm por Psyke1 » En línea

Danyfirex


Desconectado Desconectado

Mensajes: 493


My Dear Mizuho


Ver Perfil
Re: [Reto] UrlEncode y UrlDecode
« Respuesta #12 en: 22 Diciembre 2012, 20:20 pm »

@Psyke1 tu codigo no simula bien lo de la pagina. hace falta convertirla cadena a UTF8.

debe imprimirlo así:
cobein
Código
  1. https://www.google.com.ar/search?q=canci%C3%B3n
  2.  
el tuyo lo deja así:
Psyke1
Código
  1. https://www.google.com.ar/search?q=canci%F3n

saludos
En línea

Psyke1
Wiki

Desconectado Desconectado

Mensajes: 1.089



Ver Perfil WWW
Re: [Reto] UrlEncode y UrlDecode
« Respuesta #13 en: 22 Diciembre 2012, 21:15 pm »

Ok, se me escapó. :silbar: Gracias, ya lo he corregido.
Ahora tan sólo queda hacer los test con CTiming. :)

DoEvents! :P
« Última modificación: 23 Diciembre 2012, 02:07 am por Psyke1 » En línea

Páginas: 1 [2] Ir Arriba Respuesta Imprimir 

Ir a:  

Mensajes similares
Asunto Iniciado por Respuestas Vistas Último mensaje
Reto ;)
Ingeniería Inversa
NeoKiller 3 1,884 Último mensaje 15 Agosto 2004, 23:12 pm
por NeoKiller
Reto!!
Ingeniería Inversa
HaCkZaTaN 2 2,020 Último mensaje 10 Septiembre 2004, 09:30 am
por Ðevastador
eval(gzinflate(base64_decode(urldecode
PHP
luiggy2 8 7,458 Último mensaje 16 Junio 2008, 23:30 pm
por WHK
Alguien me puede ayudar con la funcion URLENCODE?
PHP
TrashAmbishion 1 3,162 Último mensaje 24 Agosto 2011, 22:54 pm
por WHK
[Pregunta]: urlencode se usa para codificar toda una url o una parte?
Desarrollo Web
Leguim 1 370 Último mensaje 16 Enero 2020, 18:58 pm
por engel lex
WAP2 - Aviso Legal - Powered by SMF 1.1.21 | SMF © 2006-2008, Simple Machines