none
Sobre urlencode RRS feed

  • Pregunta

  • Hola a todos:

    Tengo una cadena str='Empresa pública: jñlkj'

    Si hago un server.urlencode me da str='Empresa+p%c3%bablica%3a+j%c3%b1lkj'

    Y en la barra de direcciones pone 'Empresa%20p\ufffdblica:%20j\ufffdlkj'

    Cuando hago str=request.querystring("str") me da 'Empresa p\ufffdblica: j\ufffdlkj'

    ¿Por qué pone esos caracteres?

    Gracias de antemano


    • Editado volar.2016 sábado, 16 de enero de 2016 22:17
    sábado, 16 de enero de 2016 22:12

Respuestas

  • a) No, el SSL no tiene nada que ver

    b) Efectivamente, no admite codificación utf8. La normativa indica que la URL tiene que estar formada íntegramente por caracteres ASCII. EN consecuencia, si tu texto tiene un carácter no-ASCII, como la ñ, lo sustituye por \u1234, siendo 1234 el codepoint de la ñ en Unicode (he puesto 1234 como ejemplo, no sé de memoria cuál es de verdad el código que le corresponde).

    Si usas esa codificación pasando el texto por UrlEncode, después al leer la cadena tienes que decodificarla con UrlDecode.

    Eso es independiente de la codificación que se hace automáticamente con ciertos caracteres ASCII, por ejemplo, el espacio en blanco se cambia por %20 y la \ se cambia por %c3 si no recuerdo mal. Esta codificación es automática en el navegador y ocurre con independencia de que hagas UrlDecode y UrlEncode.

    domingo, 17 de enero de 2016 9:18

Todas las respuestas

  • >>¿Por qué pone esos caracteres?

    porque lo estas encodeando

    el string que recuperes deberias aplicarle el Server.UrlDecode()


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    domingo, 17 de enero de 2016 0:45
  • Hola:

    No se trata de los caracteres %.

    Si os fijáis en vez de la ñ pone / y otros caracteres. Lo mismo pasa con la ú.

    Es raro. ¿Qué puede pasar? ¿Puede influir el hecho de que todas mis páginas tienen SSL? ¿Qué no admite codificación UT-F8?

    Gracias de antemano.


    • Editado volar.2016 domingo, 17 de enero de 2016 8:46
    domingo, 17 de enero de 2016 8:36
  • a) No, el SSL no tiene nada que ver

    b) Efectivamente, no admite codificación utf8. La normativa indica que la URL tiene que estar formada íntegramente por caracteres ASCII. EN consecuencia, si tu texto tiene un carácter no-ASCII, como la ñ, lo sustituye por \u1234, siendo 1234 el codepoint de la ñ en Unicode (he puesto 1234 como ejemplo, no sé de memoria cuál es de verdad el código que le corresponde).

    Si usas esa codificación pasando el texto por UrlEncode, después al leer la cadena tienes que decodificarla con UrlDecode.

    Eso es independiente de la codificación que se hace automáticamente con ciertos caracteres ASCII, por ejemplo, el espacio en blanco se cambia por %20 y la \ se cambia por %c3 si no recuerdo mal. Esta codificación es automática en el navegador y ocurre con independencia de que hagas UrlDecode y UrlEncode.

    domingo, 17 de enero de 2016 9:18
  • Hola de nuevo:

    Es muy raro. En otro foro han hecho un ejemplo por mí y les sale bien. Recibe los mismos caracteres que envía.

    El urldecode lo hago, y sale igual.

    No sé qué puede ser. Me choca. Lo que sí es claro que en mis páginas algo hace que tanto la letra con tilde como la ñ ponga \ufddd a la hora de hacer urlencode. Sólo en ese caso, si es á, é, í, ó, ú o ñ. Es decir que lo pasa a otro juego de caracteres. Si vosotros hacéis el ejemplo os saldrá bien. Si teneis SSL debería salir bien también. Me gustaría que lo probaseis y me digais

    Gracias por cualquier ayuda.


    • Editado volar.2016 domingo, 17 de enero de 2016 10:45
    domingo, 17 de enero de 2016 10:29
  • La codificación realizada por el método UrlEncode es correcta.

    Lo que es extraño es cómo lo representa en la barra de direcciones del navegador.

    Me gustaría ver el código que utilizas para montar la url y pasársela al navegador.


    Píldoras .NET
    Artículos, tutoriales y ejemplos de código .NET

    Píldoras JS
    Artículos, tutoriales y ejemplos de código JavaScript, HTML5, CSS3, ...

    domingo, 17 de enero de 2016 11:15
  • hola

    Vuelvo a plantear la pregunta, usaste Server.UrlDecode() sobre el texto que recibes en la url ? no funciono


    Leandro Tuttini

    Blog
    MVP Profile
    Buenos Aires
    Argentina

    domingo, 17 de enero de 2016 13:28
  • Hola:

    Gracias.

    Tanto en el parámetro return y cancel_return de paypal tengo lo mismo

            strenlace = "https://www.ejemplo.com/graciasreactivaciones.aspx?" & Request.QueryString.ToString & "&titulo=" & Title & "&subtitulo=" & tdsubtitulo.InnerHtml
            Response.Write("nocancel=" & Server.UrlEncode(strenlace))
            Response.End()

    tdsubtitulo.innerhtml='Empresa pública: jñlkj'

    A la hora de recibir los datos, veo que si pasó por return (paga) hace todo bien, recibo los mismos caracteres que envié. En cambio si pasó por el cancel_return (no paga) me pone \ufffd en vez de la letra con tilde y la ñ.

    Y da igual el navegador que use: safari, firefox, opera, chrome

    En paypal tengo la codificación UT-F8.

    Pensé que sería un problema el sandbox de paypal, pero no es. Pasa igual en live paypal

    Leandro, he hecho el urldecode. Y sale igual.

    Un comportamiento curioso.

    Gracias de antemano.


    • Editado volar.2016 domingo, 17 de enero de 2016 14:24
    domingo, 17 de enero de 2016 14:16
  • Hola:

    Estoy capturando la barra de direcciones para ver qué caracteres pone. Y veo que en los dos casos, cancel_return y return (no paga y paga) pone distintos caracteres

    Si pasó por return, &subtitulo=Empresa%20pública%3a%20jñlkj

    Si pasó por cancel_return, &subtitulo=Empresa%20p\ufffdblica:%20j\ufffdlkj

    ¿Qué diferencias veis? Es decir ¿por que son diferentes?

    Gracias de antemano

    domingo, 17 de enero de 2016 14:35
  • Hola a todos:

    He hecho pruebas. Cómo salen los datos con urlencode. así es

            return p%c3%bablica%3a+j%c3%b1lkj
            cancel_return p%c3%bablica%3a+j%c3%b1lkj

    Es decir hace bien el urlencode, da los mismos caracteres tanto return como cancel_return

    Ahora he probado a cómo se reciben, al volver de paypal. Así es

            cancel_return p\ufffdblica:%20j\ufffdlkj
            return pública%3a%20jñlkj

    Es decir, parece que los toca paypal. Da igual que sea live que sandbox

    Escribiré a paypal avisando de esto.

    Quisiera saber si alguien que use paypal le ocurre esto, que pruebe con sanbox  meter un carácter con tilde o una ñ en los parámetros return y cancel_return de botón de pago

    Gracias




    • Editado volar.2016 domingo, 17 de enero de 2016 18:10
    domingo, 17 de enero de 2016 17:52