Como codificar URLs: que es URL encoding, por que es necesario y herramienta gratis

8 min de lectura

Aprende que es la codificacion URL (percent encoding), cuando necesitas usarla, caracteres reservados y como codificar/decodificar URLs gratis.

Que es URL encoding y por que existe

URL encoding (tambien llamado percent-encoding) es el proceso de convertir caracteres especiales en secuencias de %XX donde XX es el valor hexadecimal del byte. Es necesario porque las URLs solo pueden contener un subconjunto limitado de caracteres ASCII.

Ejemplo: El espacio se convierte en %20. El caracter "ñ" se convierte en %C3%B1. Un query string como nombre=Juan Pérez&ciudad=São Paulo se codifica como nombre=Juan%20P%C3%A9rez&ciudad=S%C3%A3o%20Paulo.

Por que existe: Las URLs tienen caracteres con significado especial: ? inicia query string, & separa parametros, = asigna valores, / separa paths, # indica fragmento. Si tus datos contienen estos caracteres, deben codificarse para no confundir la estructura de la URL.

Codifica/decodifica URLs al instante con el codificador URL de NexTools.

Caracteres que necesitan codificarse y cuales no

Caracteres seguros (NO necesitan codificacion):

A-Z a-z 0-9 - _ . ~

Caracteres reservados (significado especial en URLs):

CaracterCodificadoSignificado en URL
espacio%20 o +Separador de palabras
?%3FInicio de query string
&%26Separador de parametros
=%3DAsignacion clave=valor
/%2FSeparador de path
#%23Fragmento (anchor)
@%40Autenticacion usuario

Caracteres no-ASCII (tildes, CJK, emojis): Se convierten a bytes UTF-8 y cada byte se codifica. "ñ" → UTF-8 bytes C3 B1 → %C3%B1.

Como codificar URLs en JavaScript, Python y la terminal

JavaScript:

  • encodeURIComponent("Juan Pérez")"Juan%20P%C3%A9rez" — codifica todo excepto A-Za-z0-9 - _ . ~ ! ' ( ) *
  • encodeURI("https://ejemplo.com/buscar?q=hola mundo") → preserva la estructura de la URL, solo codifica espacios y caracteres no-ASCII

Diferencia critica: encodeURIComponent para VALORES de parametros. encodeURI para URLs completas. Usar el incorrecto rompe URLs.

Python:

  • from urllib.parse import quote
  • quote("Juan Pérez")"Juan%20P%C3%A9rez"

Terminal:

python3 -c "from urllib.parse import quote; print(quote('Juan Pérez'))"

Para codificar datos en Base64 (diferente de URL encoding), usa el codificador Base64 de NexTools.

Errores comunes con URL encoding

1. Doble codificacion. Codificar una URL que ya estaba codificada: %20 se convierte en %2520. El servidor ve %20 en vez de un espacio. Solucion: decodifica primero, luego codifica.

2. Confundir encodeURI y encodeURIComponent. encodeURIComponent("https://ejemplo.com/buscar") rompe la URL porque codifica : y /. Usa encodeURI para URLs completas.

3. Espacio como + vs %20. En query strings de formularios HTML (application/x-www-form-urlencoded), el espacio es +. En el resto de la URL, es %20. Mezclarlos puede causar bugs sutiles.

4. No codificar caracteres Unicode. URLs con "ñ", "ü" o caracteres CJK deben codificarse. Los navegadores lo hacen automaticamente al mostrar, pero el HTML/API debe enviar la version codificada.

URL encoding en APIs REST y formularios HTML

Query parameters en APIs: Siempre codifica los valores de parametros. GET /api/search?q=C%2B%2B&lang=espa%C3%B1ol. Si no codificas "C++" el servidor recibe "C " (+ = espacio en query strings).

Formularios HTML: El navegador codifica automaticamente los datos del formulario con application/x-www-form-urlencoded. Los espacios se envian como +.

JSON APIs: Los datos van en el body como JSON, no necesitan URL encoding. Solo los query parameters y la URL del endpoint necesitan codificacion.

Valida tu JSON antes de enviarlo con el validador JSON de NexTools.

IDN y URLs internacionalizadas

IDN (Internationalized Domain Names): Dominios con caracteres no-ASCII como münchen.de o 中国.cn. Internamente se convierten a Punycode: xn--mnchen-3ya.de.

IRI (Internationalized Resource Identifiers): Extension de URI que permite caracteres Unicode directamente. Los navegadores muestran la version legible pero envian la codificada.

Ejemplo: Escribes https://es.wikipedia.org/wiki/Año_Nuevo. El navegador envia https://es.wikipedia.org/wiki/A%C3%B1o_Nuevo.

Para generar URLs amigables, usa el generador de slug de NexTools que elimina caracteres que necesitarian codificacion.

Como usar el codificador URL de NexTools

El codificador URL de NexTools:

Codificar: Pega texto o URL parcial → obten la version codificada con %XX.

Decodificar: Pega una URL codificada → obten la version legible.

Todo en tu navegador. Util para debuggear URLs rotas, preparar parametros para APIs, o entender URLs codificadas en logs de servidor.

URL encoding vs Base64 vs HTML entities: no confundir

URL encoding (%XX): Para caracteres en URLs. Espacio → %20.

Base64: Para codificar datos binarios como texto. Diferente proposito, diferente formato. Consulta nuestra guia de Base64.

HTML entities: Para caracteres especiales en HTML. < → &lt;, & → &amp;. Solo para contenido HTML, no para URLs.

Regla practica: Si el dato va en una URL → URL encoding. Si va en el body de un request como binario → Base64. Si va en el HTML de una pagina → HTML entities.

Prueba esta herramienta:

Abrir herramienta

Preguntas frecuentes

Que diferencia hay entre encodeURI y encodeURIComponent en JavaScript

encodeURI codifica una URL COMPLETA preservando su estructura (no codifica : / ? # & =). encodeURIComponent codifica un COMPONENTE de la URL (codifica TODO excepto A-Za-z0-9 - _ . ~). Usa encodeURIComponent para valores de parametros y encodeURI para URLs enteras.

Por que los espacios se codifican como %20 a veces y como + otras

En query strings de formularios HTML (application/x-www-form-urlencoded), el espacio es +. En el resto de la URL (path, fragment), es %20. Son dos convenciones historicas que coexisten.

Que es la doble codificacion y como evitarla

Es codificar una URL que ya estaba codificada. %20 se convierte en %2520. El servidor recibe '%20' literal en vez de un espacio. Para evitarla: decodifica primero con decodeURIComponent, luego codifica.

Los navegadores codifican URLs automaticamente

Parcialmente. Los navegadores codifican caracteres no-ASCII en la barra de direcciones pero muestran la version legible al usuario. En formularios HTML, el navegador codifica automaticamente. En JavaScript (fetch, XMLHttpRequest), debes codificar manualmente los parametros.

URL encoding y Base64 son lo mismo

No. URL encoding (%XX) es para caracteres especiales en URLs. Base64 convierte datos binarios en texto ASCII. Diferentes propositos, diferentes formatos. No son intercambiables.

Como codifico caracteres chinos o japoneses en una URL

Se convierten a bytes UTF-8 y cada byte se codifica como %XX. El caracter chino '中' (3 bytes UTF-8: E4 B8 AD) se convierte en %E4%B8%AD. Herramientas como NexTools manejan esto automaticamente.