none
Manejar flitros en las url con tildes RRS feed

  • Pregunta

  • Buena noche.

    Últimamente he estado probando MVC 3 y la verdad me ha gustado mucho, pero me ha surgido un problema:

    He estado intentando realizar pruebas para un filtro de categorías utilizando su nombre (cosa que he visto que hacen por ejemplo en blogger), pero cuando me llega el parámetro desde la url (\?categoria=Categor%EDa%20de%20prueba ) me llega esto:

    Problema

    ¿como manejo este tema?, necesito que llegue el string con tildes y ñ. Creo que es algo relacionado con el encoding del texto que llega por get, pero no se como corregirlo, les agradecería a los que saben del tema que me echaran una mano.

    miércoles, 18 de julio de 2012 4:13

Respuestas

  • [...] algo relacionado con el encoding del texto que llega por get [...]

    En el get siempre llega únicamente ASCII puro, el protocolo HTTP no admite ningún otro tipo de encoding dentro del get (ver RFC 3986). Por eso los caracteres especiales se codifican con símbolos de %, tales como %f5, para que la cadena resultante sea ASCII. Dentro de esos %... va codificado el carácter en hexadecimal, y aquí sí que puede influir el encoding a la hora de convertir el carácter en su representación hexadecimal. La especificación dice que "debería" (should) usarse UTF-8, pero hay casos en los que los navegadores emplean Latin1. Por lo tanto, y salvo que uses algún tipo de heurística para determinar dinámicamente cómo te están llegando codificados los caracteres, no es fiable la transmisión de acentos y eñes por esta vía si el usuario los escribe manualmente en la barra de direcciones del navegador. Otra cosa es que sean el resultado de "pinchar" en un hiperenlace que tú mismo has embebido previamente en la página. En ese caso sí que puedes hacer que funcione bien, si tienes cuidado de embeber la codificación dentro del enlace con el mismo encoding que luego uses para decodificar ese enlace. Dentro de ASP.NET, se dispone de los métodos Server.UrlEncode y Server.UrlDecode que permiten hacer esta labor automáticaente.

    • Propuesto como respuesta jtorrecilla miércoles, 18 de julio de 2012 8:23
    • Marcado como respuesta xxNickle miércoles, 18 de julio de 2012 22:00
    miércoles, 18 de julio de 2012 7:56

Todas las respuestas

  • [...] algo relacionado con el encoding del texto que llega por get [...]

    En el get siempre llega únicamente ASCII puro, el protocolo HTTP no admite ningún otro tipo de encoding dentro del get (ver RFC 3986). Por eso los caracteres especiales se codifican con símbolos de %, tales como %f5, para que la cadena resultante sea ASCII. Dentro de esos %... va codificado el carácter en hexadecimal, y aquí sí que puede influir el encoding a la hora de convertir el carácter en su representación hexadecimal. La especificación dice que "debería" (should) usarse UTF-8, pero hay casos en los que los navegadores emplean Latin1. Por lo tanto, y salvo que uses algún tipo de heurística para determinar dinámicamente cómo te están llegando codificados los caracteres, no es fiable la transmisión de acentos y eñes por esta vía si el usuario los escribe manualmente en la barra de direcciones del navegador. Otra cosa es que sean el resultado de "pinchar" en un hiperenlace que tú mismo has embebido previamente en la página. En ese caso sí que puedes hacer que funcione bien, si tienes cuidado de embeber la codificación dentro del enlace con el mismo encoding que luego uses para decodificar ese enlace. Dentro de ASP.NET, se dispone de los métodos Server.UrlEncode y Server.UrlDecode que permiten hacer esta labor automáticaente.

    • Propuesto como respuesta jtorrecilla miércoles, 18 de julio de 2012 8:23
    • Marcado como respuesta xxNickle miércoles, 18 de julio de 2012 22:00
    miércoles, 18 de julio de 2012 7:56
  • muchísimas gracias por la explicación, precisamente estaba haciendo las pruebas escribiendo las palabras directamente en la dirección del navegador, cosa que según lo explicado claramente va a molestar. Cuando tenga un tiempo voy a hacer la prueba con los enlaces a ver si me doy maña, pero realmente ha sido una explicación muy útil, nuevamente muchas gracias.
    miércoles, 18 de julio de 2012 21:49