¿Qué es la codificación de URL y por qué la necesitamos?

La codificación de URL, también conocida como codificación porcentual, es un mecanismo fundamental para codificar información en URLs. Si alguna vez has visto %20 o %3F en una dirección web, has encontrado la codificación de URL en acción.

Por qué existe la codificación de URL

Las URLs (Localizadores Uniformes de Recursos) fueron diseñadas en los primeros días de internet con limitaciones estrictas. Solo pueden contener un conjunto específico de caracteres ASCII:

  • Letras: A-Z, a-z
  • Números: 0-9
  • Caracteres seguros: -, _, ., ~

Pero aquí está el problema: las aplicaciones web necesitan transmitir todo tipo de datos a través de URLs - incluyendo espacios, símbolos especiales y caracteres de todos los idiomas humanos. La codificación de URL resuelve este desafío.

El problema que soluciona la codificación de URL

Los caracteres reservados tienen significado especial

Ciertos caracteres en URLs tienen propósitos específicos:

CarácterPropósitoEjemplo
?Inicia cadena de consultaexample.com/search?q=test
&Separa parámetros?nombre=Juan&edad=25
=Asigna valor a parámetro?clave=valor
#Indica fragmentoexample.com/page#seccion
/Separa segmentos de rutaexample.com/blog/post
:Separa protocolo/puertohttps://example.com:8080

¿Qué ocurre sin codificación?

Imagina que quieres buscar "Tom & Jerry":

❌ Incorrecto: example.com/search?q=Tom & Jerry

El navegador interpreta & como un separador de parámetros, haciendo esto dos parámetros:

  • q=Tom (¡incompleto!)
  • Jerry (¿qué es esto?)

Con codificación:

✅ Correcto: example.com/search?q=Tom%20%26%20Jerry

Ahora está claro: un parámetro q con valor "Tom & Jerry".

Los caracteres internacionales no son ASCII

El conjunto de caracteres ASCII original no incluye:

  • Caracteres chinos: 中文
  • Escritura árabe: العربية
  • Emojis: 😀
  • Letras con acentos: café, naïve

La codificación de URL hace que todos estos caracteres sean transmisibles.

Cómo funciona la codificación de URL

El proceso de codificación sigue una regla simple:

Reemplaza caracteres especiales con % seguido de dos dígitos hexadecimales que representan el valor del carácter.

Codificaciones de caracteres comunes

CarácterNombreCodificadoPor qué se codifica
Espacio%20Los espacios no están permitidos
!Exclamación%21Puede interferir con algunos sistemas
#Almohadilla%23Marca fragmentos de URL
$Dólar%24Reservado para uso futuro
%Porcentaje%25¡El indicador de codificación mismo!
&Ampersand%26Separador de parámetros
+Más%2BPuede significar espacio en algunos contextos
=Igual%3DSeparador clave-valor
?Interrogación%3FIniciador de cadena de consulta
@Arroba%40Separador de info de usuario

Cómo funciona el hexadecimal

Cada carácter tiene un código ASCII. La representación hexadecimal (base-16) hace que la codificación sea compacta:

Carácter espacio:
- Código ASCII: 32 (decimal)
- Hexadecimal: 20
- Codificado: %20

Ampersand (&):
- Código ASCII: 38 (decimal)
- Hexadecimal: 26
- Codificado: %26

UTF-8 y caracteres internacionales

Para caracteres fuera de ASCII (básicamente cualquier cosa que no sea inglés), la codificación de URL usa UTF-8:

  1. Convertir carácter a bytes UTF-8
  2. Codificar cada byte como %XX

Ejemplos

Carácter chino "中":

Carácter: 中
Bytes UTF-8: E4 B8 AD (3 bytes)
Codificado: %E4%B8%AD

Emoji "😀":

Carácter: 😀
Bytes UTF-8: F0 9F 98 80 (4 bytes)
Codificado: %F0%9F%98%80

¡Esto hace que cada carácter en cada idioma sea transmisible vía URLs!

Casos de uso del mundo real

1. Consultas de búsqueda

Cuando buscas algo en Google:

Lo que escribes: "mejor café en madrid"
En lo que se convierte la URL: ?q=mejor%20caf%C3%A9%20en%20madrid

2. Envíos de formularios

Formularios HTML con method="GET" codifican datos del formulario:

<form method="GET" action="/search">
  <input name="producto" value="zapatos de mujer" />
  <input name="talla" value="7" />
</form>

Envía a: /search?producto=zapatos%20de%20mujer&talla=7

3. Solicitudes de API

Construir llamadas de API RESTful con parámetros:

Original: /api/usuarios?nombre=Juan Pérez&[email protected]
Codificado: /api/usuarios?nombre=Juan%20P%C3%A9rez&email=juan%40example.com

4. Autenticación

Las URLs de redirección OAuth a menudo contienen URLs de callback codificadas:

/oauth/authorize?redirect_uri=https%3A%2F%2Fmiapp.com%2Fcallback

5. Enlaces para compartir

Los botones de compartir en redes sociales codifican la URL que se comparte:

https://twitter.com/intent/tweet?url=https%3A%2F%2Fexample.com%2Farticulo&text=%C2%A1Mira%20esto%21

Cuándo codificar

Codifica siempre:

✅ Entrada de usuario en parámetros de consulta ✅ Datos de formulario con caracteres especiales ✅ Texto internacional (chino, árabe, emojis, etc.) ✅ Rutas de archivo con espacios ✅ Direcciones de correo electrónico en URLs ✅ Datos JSON en URLs

Usualmente no necesitas codificar:

❌ La ruta misma (a menos que tenga caracteres especiales) ❌ El nombre de dominio ❌ El protocolo (https://) ❌ Puntuación estándar bajo tu control

Cómo codificar URLs

JavaScript

// Para valores de parámetros (más común)
const consulta = "¡hola mundo!";
const codificado = encodeURIComponent(consulta);
// Resultado: "%C2%A1hola%20mundo%21"

// Para URLs completas
const url = "https://example.com/search?q=hola mundo";
const codificado = encodeURI(url);
// Resultado: "https://example.com/search?q=hola%20mundo"

Python

from urllib.parse import quote, quote_plus

# Codificación estándar
texto = "¡hola mundo!"
codificado = quote(texto)  # '%C2%A1hola%20mundo%21'

# Codificación con más (para datos de formulario)
codificado = quote_plus(texto)  # '%C2%A1hola+mundo%21'

PHP

// Para valores de parámetros
$consulta = "¡hola mundo!";
$codificado = urlencode($consulta);  // "%C2%A1hola+mundo%21"

// Para uso general
$codificado = rawurlencode($consulta);  // "%C2%A1hola%20mundo%21"

Trampas comunes

1. Olvidar codificar entrada de usuario

// ❌ Peligroso - se rompe con caracteres especiales
const url = `/search?q=${entradaUsuario}`;

// ✅ Seguro - siempre codifica
const url = `/search?q=${encodeURIComponent(entradaUsuario)}`;

2. Doble codificación

// ❌ Incorrecto - codificar dos veces
const texto = "hola mundo";
const codificado = encodeURIComponent(encodeURIComponent(texto));
// Resultado: "hola%2520mundo" (¡roto!)

// ✅ Correcto - codifica una vez
const codificado = encodeURIComponent(texto);
// Resultado: "hola%20mundo"

3. No descodificar después de la transmisión

// ❌ Incorrecto - mostrar texto codificado a usuarios
console.log(params.get('nombre'));  // "Juan%20P%C3%A9rez"

// ✅ Correcto - descodifica para mostrar
console.log(decodeURIComponent(params.get('nombre')));  // "Juan Pérez"

Mejores prácticas

  1. Codifica siempre la entrada del usuario antes de ponerla en URLs
  2. Usa funciones integradas - no intentes codificar manualmente
  3. Elige la función correcta - encodeURIComponent() para parámetros
  4. Descodifica al leer - no muestres %20 a los usuarios
  5. Prueba con caracteres especiales - incluyendo espacios, &, =, #
  6. Prueba con texto internacional - chino, árabe, emojis
  7. No pongas datos sensibles en URLs - incluso codificados, son visibles

Probando tus URLs

¿Quieres experimentar con la codificación de URL? Prueba estas herramientas gratuitas:

Conclusión

La codificación de URL es un concepto simple pero esencial para el desarrollo web. Asegura que:

  • Los caracteres especiales no rompan las URLs
  • El texto internacional pueda ser transmitido
  • Los datos fluyan de forma segura entre cliente y servidor
  • Las URLs funcionen consistentemente en todos los sistemas

Recuerda: ¡En caso de duda, codifícalo! Tus URLs (y usuarios) te lo agradecerán.


¡Prueba nuestro codificador de URL gratuito para codificar tus URLs instantáneamente, o usa el descodificador de URL para descodificar cadenas codificadas en porcentaje!