Guía12 min de lectura

La guía completa de la codificación de URL

Aprende todo sobre la codificación de URL: qué es, por qué es importante, cómo funciona el percent-encoding y las mejores prácticas para manejar caracteres especiales en las URL.

¿Qué es la codificación de URL?

La codificación de URL, también conocida como percent-encoding, es un mecanismo para codificar información en un Identificador Uniforme de Recursos (URI) bajo ciertas circunstancias. Aunque se conoce como codificación de URL, también se utiliza de forma más general dentro del conjunto principal de Identificadores Uniformes de Recursos (URI), que incluye tanto el Localizador Uniforme de Recursos (URL) como el Nombre Uniforme de Recursos (URN).

La codificación es necesaria porque las URL solo pueden enviarse a través de Internet utilizando el conjunto de caracteres ASCII. Dado que las URL suelen contener caracteres fuera del conjunto ASCII, la URL debe convertirse a un formato ASCII válido. La codificación de URL reemplaza los caracteres ASCII inseguros por un % seguido de dos dígitos hexadecimales.

¿Cómo funciona el percent-encoding?

El mecanismo de percent-encoding funciona convirtiendo cada carácter que necesita codificarse en uno o más bytes. Cada byte se representa entonces mediante un signo de porcentaje seguido de dos dígitos hexadecimales. Los dígitos hexadecimales representan el valor en bytes del carácter en la codificación especificada (normalmente UTF-8).

Por ejemplo, el carácter de espacio (valor ASCII 32, hex 20) se convierte en %20. El ampersand & (valor ASCII 38, hex 26) se convierte en %26. Los caracteres no ASCII, como la e con acento agudo, se codifican primero en su secuencia de bytes UTF-8 y luego cada byte se codifica con percent-encoding.

Caracteres reservados frente a no reservados

El RFC 3986 define dos categorías de caracteres para las URI: reservados y no reservados. Los caracteres no reservados incluyen letras mayúsculas y minúsculas (A-Z, a-z), dígitos (0-9), guiones (-), puntos (.), guiones bajos (_) y virgulillas (~). Estos caracteres pueden incluirse en una URI sin necesidad de codificación.

Los caracteres reservados tienen significados especiales en la sintaxis de las URL. Estos incluyen: :, /, ?, #, [, ], @, !, $, &, ', (, ), *, +, ,, ; y =. Cuando estos caracteres se usan en un componente de una URI fuera de su propósito reservado, deben codificarse con percent-encoding.

Codificación de URL en diferentes lenguajes

JavaScript

JavaScript proporciona dos pares de funciones para la codificación de URL: encodeURI() / decodeURI() para codificar URI completas, y encodeURIComponent() / decodeURIComponent() para codificar componentes individuales de una URI. La diferencia clave es que encodeURI() conserva los caracteres reservados que tienen un significado especial en las URI (como /, ?, #), mientras que encodeURIComponent() codifica todos los caracteres no alfanuméricos.

Python

El módulo urllib.parse de Python proporciona quote() y unquote() para la codificación/decodificación básica, además de urlencode() para codificar diccionarios en cadenas de consulta. La función quote() acepta un parámetro opcional safe para especificar los caracteres que no deben codificarse.

PHP

PHP ofrece urlencode(), que codifica los espacios como + (siguiendo el formato application/x-www-form-urlencoded), y rawurlencode(), que codifica los espacios como %20 (siguiendo el RFC 3986). Para la decodificación, utiliza urldecode() y rawurldecode() respectivamente.

Mejores prácticas

  • Codifica siempre la entrada del usuario antes de incluirla en las URL
  • Usa encodeURIComponent() para codificar los valores de los parámetros de consulta en JavaScript
  • Usa encodeURI() solo cuando codifiques una URI completa
  • Sé coherente con tu enfoque de codificación en toda tu aplicación
  • Decodifica siempre las URL en el lado del servidor antes de procesarlas
  • Prueba tu codificación con caracteres especiales, incluido Unicode
  • No codifiques las URL dos veces: comprueba siempre si una cadena ya está codificada

Artículos relacionados

Prueba nuestras herramientas gratuitas