Qué significa la codificación URL en términos técnicos
Según el RFC 3986, la codificación URL significa que una URL solo puede contener caracteres ASCII «no reservados» específicos, y cualquier carácter fuera de este conjunto permitido debe convertirse antes de que pueda viajar de forma segura por la web.
La regla de transformación es sencilla:
% + dos dígitos hexadecimales
El valor hexadecimal representa el byte numérico del carácter original.
Por qué es necesaria esta transformación
Si los caracteres no se convierten correctamente:
- Los espacios interrumpen la ruta URL.
- Las cadenas de consulta pueden dividirse incorrectamente.
- Los símbolos especiales pueden interpretarse erróneamente.
- Los servidores pueden responder con errores 400 o 404.
- Pueden surgir riesgos de seguridad debido a solicitudes malformadas.
Cuando se aplica correctamente, la conversión garantiza:
- Comunicación HTTP estable.
- Un análisis preciso de los parámetros.
- Un comportamiento coherente entre navegadores.
- Una decodificación fiable en el lado del servidor.
Cómo funciona el proceso de codificación paso a paso
Técnicamente, este mecanismo convierte los caracteres en su representación hexadecimal en bytes basada en la codificación ASCII o UTF-8. Cada byte resultante lleva como prefijo un signo de porcentaje.
Ejemplo 1: Espacio en una ruta de archivo
URL original:
https://example.com/new page.html
No se permite el uso de espacios dentro de una ruta.
Valor del carácter del espacio:
- Decimal: 32
- Hexadecimal: 20
Versión corregida:
https://example.com/new%20page.html
Ejemplo 2: Símbolos especiales dentro de los parámetros
Original:
https://example.com/search?q=smart locker & indoor
Si & se trata como un dato en lugar de como un separador de parámetros, debe codificarse.
Versión correcta:
https://example.com/search?q=smart%20locker%20%26%20indoor
Elementos convertidos:
- Espacio → %20
- & → %26
Importante: El símbolo «&» que separa los parámetros debe permanecer sin cambios.
Categorías de caracteres en las URL
Reconocer los tipos de caracteres ayuda a evitar transformaciones incorrectas.
Caracteres no reservados
Estos caracteres son seguros y pueden permanecer sin cambios:
|
Categoría |
Caracteres |
|
Letras |
A–Z a–z |
|
Números |
0–9 |
|
Símbolos |
- _ . ~ |
Ejemplo:
https://example.com/product-123_A
No es necesaria ninguna conversión.
Caracteres reservados
Estos caracteres definen la estructura de una URL:
|
Característica |
Función |
|
? |
Inicia la cadena de consulta |
|
& |
Separa los parámetros |
|
= |
Asigna valores a los parámetros |
|
# |
Referencia de fragmento |
|
/ |
Separador de ruta |
|
: |
Separador de esquema |
Si estos símbolos se codifican incorrectamente, la dirección pierde su estructura lógica.
Incorrecto:
https://example.com/page%3Fid%3D10
Correcto:
https://example.com/page?id=10
Caracteres que deben convertirse
Los siguientes símbolos deben transformarse cuando se utilizan como datos literales:
- Espacio
- "
- < >
- { }
- |
- \
- ^
- `
- %
Ejemplo con el signo de porcentaje
Original:
https://example.com/50% discount
Versión segura:
https://example.com/50%25%20discount
- % se convierte en %25
- El espacio se convierte en %20
Codificación de URL en aplicaciones web
En el desarrollo práctico, cuando los desarrolladores definen la codificación de URL, suelen referirse a datos que ya se han convertido al formato codificado en porcentaje antes de enviarse dentro de una solicitud HTTP.
Encontrará estos valores transformados en:
- Envíos de formularios HTML.
- Llamadas AJAX.
- Parámetros de redireccionamiento.
- URL de seguimiento.
- Solicitudes de API REST.
Ejemplo: Datos del formulario.
El usuario introduce:
John Smith & Co.
El navegador envía:
John+Smith+%26+Co.
Nota: En el formato application/x-www-form-urlencoded, los espacios se sustituyen por + en lugar de %20.
Implementación en código.
La mayoría de los lenguajes de programación proporcionan utilidades integradas.
Ejemplo de JavaScript
Codificación de un parámetro:
encodeURIComponent(«indoor locker & storage»)
Resultado:
indoor%20locker%20%26%20storage
La decodificación restaura la cadena original:
decodeURIComponent(«indoor%20locker%20%26%20storage»)
Manejo de Unicode y URL multilingües
Los sistemas modernos se basan en UTF-8. Los caracteres no ASCII se convierten primero en secuencias de bytes UTF-8 y luego se expresan en formato porcentual.
Ejemplo:
Original:
https://example.com/product
Convertido:
https://example.com/%D0%BF%D1%80%D0%BE%D0%B4%D1%83%D0%BA%D1%82
Cada byte UTF-8 se convierte en %XX.
Este mecanismo permite el manejo adecuado de contenidos internacionales y sitios web multilingües.
Tabla de referencia rápida
|
Caracteres |
Decimales |
Hexadecimales |
Codificados |
|
Espacio |
32 |
20 |
%20 |
|
! |
33 |
21 |
%21 |
|
“ |
34 |
22 |
%22 |
|
# |
35 |
23 |
%23 |
|
% |
37 |
25 |
%25 |
|
& |
38 |
26 |
%26 |
|
= |
61 |
3D |
%3D |
|
? |
63 |
3F |
%3F |
Errores frecuentes en la implementación
Doble conversión
Ejemplo:
%20 → %2520
Esto ocurre cuando se vuelven a procesar datos que ya han sido transformados.
Consecuencias:
Redireccionamientos rotos.
Parámetros corruptos.
Depuración compleja.
Codificación de la dirección completa
Incorrecto:
encodeURIComponent(«https://example.com/page?id=5»)
Solo deben transformarse los valores de los parámetros, no los componentes estructurales de la dirección.
Manejo canónico inconsistente
Si se puede acceder tanto a la versión convertida como a la no convertida de una página, pueden aparecer URL duplicadas. Una lógica de generación de URL adecuada debe garantizar la coherencia.
Por qué es importante una implementación adecuada
En esencia, este mecanismo garantiza que los caracteres que no son seguros para la transmisión directa se representen en un formato estandarizado y fácil de transportar. Mantiene la comunicación HTTP predecible y legible por máquina.
Funciona entre bastidores en:
- Marcos web.
- Sistemas de enrutamiento.
- Filtros de comercio electrónico.
- Puntos finales de API.
- Seguimiento analítico.
Cuando se implementa correctamente, permanece invisible para los usuarios. Cuando se configura incorrectamente, da lugar a solicitudes malformadas, problemas de indexación y un comportamiento inestable de las aplicaciones.
Es esencial que los desarrolladores que crean sistemas web fiables y escalables comprendan claramente cómo funciona la transformación de caracteres.