Introducción
La codificación y decodificación de URL son conceptos fundamentales en el desarrollo web con los que muchos desarrolladores se encuentran pero no comprenden completamente. Probablemente hayas visto URLs con caracteres extraños como %20 o %3D, ¿pero sabes qué significan y cuándo usarlos?
Esta guía desmitificará la codificación y decodificación de URL, explicando cuándo, por qué y cómo usarlas en tus proyectos de desarrollo web.
¿Qué es la Codificación de URL?
La codificación de URL, también conocida como codificación porcentual, es el proceso de convertir caracteres en un formato que puede transmitirse de forma segura a través de Internet. Reemplaza caracteres inseguros o reservados con un % seguido de dos dígitos hexadecimales.
Por Qué Existe la Codificación de URL
Las URLs tienen un conjunto limitado de caracteres que pueden usarse de forma segura:
- Caracteres no reservados: A-Z, a-z, 0-9 y algunos caracteres especiales (-, _, ., ~)
- Caracteres reservados: Tienen significado especial en las URLs (/, ?, #, &, =, etc.)
- Caracteres inseguros: Pueden causar problemas en las URLs (espacios, caracteres no ASCII, etc.)
El Proceso de Codificación
Cuando un carácter necesita ser codificado:
- Convierte el carácter a su valor de byte ASCII/UTF-8
- Representa ese byte como dos dígitos hexadecimales
- Antepone un símbolo
%
Ejemplo: Carácter de espacio (ASCII 32 = 0x20) se convierte en %20
Caracteres Codificados Comunes
Caracteres Frecuentemente Codificados
Espacio → %20
! → %21
" → %22
# → %23
$ → %24
% → %25
& → %26
' → %27
( → %28
) → %29
* → %2A
+ → %2B
, → %2C
/ → %2F
: → %3A
; → %3B
= → %3D
? → %3F
@ → %40
[ → %5B
\ → %5C
] → %5D
^ → %5E
` → %60
{ → %7B
| → %7C
} → %7D
~ → %7E
Casos Especiales
Espacio: Puede codificarse como %20 o + (en cadenas de consulta)
Caracteres No ASCII: Codificados usando representación de bytes UTF-8
Caracteres Unicode: Codificación multibyte (ej., é → %C3%A9)
Cuándo Usar la Codificación de URL
1. Parámetros de Consulta
Problema: Los parámetros de consulta pueden contener caracteres especiales Solución: Codificar valores de parámetros
Ejemplo:
Mal: /search?q=hola mundo&category=desarrollo web
Bien: /search?q=hola%20mundo&category=desarrollo%20web
2. Segmentos de Ruta
Problema: Las rutas de URL pueden contener caracteres especiales Solución: Codificar segmentos de ruta
Ejemplo:
Mal: /files/mi documento.pdf
Bien: /files/mi%20documento.pdf
3. Envío de Datos de Formulario
Problema: Los datos de formulario pueden contener caracteres reservados Solución: Codificar valores de formulario antes del envío
Ejemplo:
<form action="/submit" method="get">
<input name="email" value="[email protected]">
<!-- [email protected] se convierte en usuario%40example.com -->
</form>
4. Solicitudes API
Problema: Los parámetros de API pueden contener caracteres especiales Solución: Codificar parámetros en llamadas API
Ejemplo:
const query = "hola mundo";
const url = `https://api.example.com/search?q=${encodeURIComponent(query)}`;
// Resultado: https://api.example.com/search?q=hola%20mundo
5. Nombres de Archivo en URLs
Problema: Los nombres de archivo pueden contener espacios o caracteres especiales Solución: Codificar nombres de archivo en URLs
Ejemplo:
Mal: /downloads/mi archivo (2024).pdf
Bien: /downloads/mi%20archivo%20%282024%29.pdf
Decodificación de URL
La decodificación de URL es el proceso inverso: convertir caracteres codificados de vuelta a su forma original.
Cuándo Decodificar
- Procesamiento de Parámetros de URL: Extraer valores de cadenas de consulta
- Análisis de URLs: Dividir URLs en componentes
- Visualización de URLs: Mostrar URLs legibles por humanos a los usuarios
- Respuestas de API: Decodificar datos recibidos de APIs
Proceso de Decodificación
- Encuentra
%seguido de dos dígitos hexadecimales - Convierte dígitos hexadecimales a decimal
- Reemplaza con el carácter correspondiente
Ejemplo: %20 → Espacio (0x20 = 32 = carácter de espacio)
Ejemplos Prácticos
Ejemplo 1: Codificación de Parámetros de Consulta
// JavaScript
const params = {
name: "Juan Pérez",
email: "[email protected]",
message: "¡Hola, mundo!"
};
const queryString = Object.entries(params)
.map(([key, value]) =>
`${encodeURIComponent(key)}=${encodeURIComponent(value)}`
)
.join('&');
// Resultado: name=Juan%20P%C3%A9rez&email=juan%40example.com&message=%C2%A1Hola%2C%20mundo%21
Ejemplo 2: Construcción Segura de URLs
function buildURL(base, path, params) {
const encodedPath = path.split('/')
.map(segment => encodeURIComponent(segment))
.join('/');
const queryString = Object.entries(params)
.map(([key, value]) =>
`${encodeURIComponent(key)}=${encodeURIComponent(value)}`
)
.join('&');
return `${base}${encodedPath}?${queryString}`;
}
// Uso
const url = buildURL('https://api.example.com', '/users/juan pérez', {
filter: 'active',
sort: 'name'
});
Ejemplo 3: Decodificación de Parámetros de URL
function parseQueryString(queryString) {
const params = {};
const pairs = queryString.split('&');
for (const pair of pairs) {
const [key, value] = pair.split('=');
params[decodeURIComponent(key)] = decodeURIComponent(value || '');
}
return params;
}
// Uso
const query = "name=Juan%20P%C3%A9rez&email=juan%40example.com";
const params = parseQueryString(query);
// { name: "Juan Pérez", email: "[email protected]" }
Funciones de Codificación en Diferentes Lenguajes
JavaScript
// Codificar URL completa
encodeURI("https://example.com/ruta con espacios/archivo.html")
// "https://example.com/ruta%20con%20espacios/archivo.html"
// Codificar componente (más agresivo)
encodeURIComponent("hola mundo")
// "hola%20mundo"
// Decodificar
decodeURI("https://example.com/ruta%20con%20espacios/archivo.html")
decodeURIComponent("hola%20mundo")
Diferencia Clave:
encodeURI(): Codifica la URL pero preserva la estructura de URLencodeURIComponent(): Codifica todo, usar para parámetros de consulta
Python
from urllib.parse import quote, unquote, urlencode
# Codificar
quote("hola mundo")
# "hola%20mundo"
# Decodificar
unquote("hola%20mundo")
# "hola mundo"
# Codificar parámetros de consulta
urlencode({"name": "Juan Pérez", "age": 30})
# "name=Juan+P%C3%A9rez&age=30"
PHP
// Codificar
urlencode("hola mundo");
// "hola+mundo"
rawurlencode("hola mundo");
// "hola%20mundo"
// Decodificar
urldecode("hola+mundo");
rawurldecode("hola%20mundo");
Errores Comunes
Error 1: Codificación Doble
Problema: Codificar cadenas ya codificadas
// MALO
encodeURIComponent(encodeURIComponent("hola mundo"))
// "hola%2520mundo" (codificado doblemente)
// BIEN
encodeURIComponent("hola mundo")
// "hola%20mundo"
Error 2: Codificar la URL Completa
Problema: Codificar la URL completa en lugar de componentes
// MALO
encodeURIComponent("https://example.com/search?q=hola mundo")
// Codifica la URL completa incluyendo :, /, ?, etc.
// BIEN
const base = "https://example.com/search";
const query = encodeURIComponent("hola mundo");
const url = `${base}?q=${query}`;
Error 3: No Codificar Caracteres Especiales
Problema: Asumir que ciertos caracteres son seguros
// MALO - & romperá la cadena de consulta
const url = `/search?q=hola&mundo&category=tech`;
// BIEN
const url = `/search?q=${encodeURIComponent("hola&mundo")}&category=tech`;
Error 4: Codificación Inconsistente
Problema: Mezclar valores codificados y no codificados
// MALO
const url = `/search?q=hola mundo&category=tech`; // Espacio no codificado
// BIEN
const url = `/search?q=${encodeURIComponent("hola mundo")}&category=tech`;
Mejores Prácticas
1. Siempre Codificar Entrada del Usuario
Nunca confíes en la entrada del usuario en URLs. Siempre codifica:
- Datos de formulario
- Consultas de búsqueda
- Nombres de archivo
- Cualquier dato proporcionado por el usuario
2. Usar Funciones Apropiadas
- Componentes de URL: Usa
encodeURIComponent() - URLs completas: Usa
encodeURI()o codifica componentes por separado - Datos de formulario: Usa codificación de formulario o
encodeURIComponent()
3. Decodificar al Procesar
Siempre decodifica cuando:
- Extraes parámetros de URLs
- Procesas respuestas de API
- Muestras URLs a usuarios
- Analizas cadenas de consulta
4. Manejar Casos Especiales
- Caracteres no ASCII (codificación UTF-8)
- URLs muy largas (pueden necesitar división)
- Caracteres especiales en diferentes contextos
- Diferencias de navegador en codificación
Consideraciones de Seguridad
Ataques de Inyección de URL
Riesgo: Código malicioso en URLs Solución: Siempre validar y sanitizar valores decodificados
// MALO - Uso directo del valor decodificado
const userInput = decodeURIComponent(urlParam);
document.innerHTML = userInput; // Riesgo XSS
// BIEN - Sanitizar después de decodificar
const userInput = sanitize(decodeURIComponent(urlParam));
document.textContent = userInput;
Fuga de Información
Riesgo: Datos sensibles en URLs Solución: Nunca pongas datos sensibles en URLs, incluso codificados
Conclusión
La codificación y decodificación de URL son habilidades esenciales para los desarrolladores web. Entender cuándo y cómo codificar URLs previene enlaces rotos, problemas de seguridad y problemas de experiencia del usuario.
Recuerda:
- Codifica al construir URLs con entrada de usuario o caracteres especiales
- Decodifica al procesar URLs o mostrarlas a usuarios
- Siempre valida valores decodificados antes de usar
- Usa la función correcta para el contexto correcto
Dominar la codificación de URL te hará un desarrollador web más efectivo y te ayudará a construir aplicaciones más robustas.
Usando Nuestras Herramientas de URL
En 1tool.dev, ofrecemos potentes herramientas de Codificador de URL y Decodificador de URL que hacen que trabajar con URLs sea simple y seguro. Ya sea que estés construyendo APIs o procesando solicitudes web, nuestras herramientas te ayudan a manejar la codificación de URL correctamente.
¡Prueba nuestras herramientas de codificación de URL hoy y asegúrate de que tus URLs siempre estén correctamente formateadas!




