Codificar / Decodificar URL
Codifica o decodifica URLs y query strings con porcentajes.
100% en tu navegador — no se sube nadaCodificar y decodificar URLs online
Sobre este codificador de URLs
Las URLs solo admiten un conjunto limitado de caracteres, así que los espacios, las tildes, la ñ, el signo & y casi todos los símbolos tienen que codificarse con porcentajes: un espacio se vuelve %20 y la ñ se vuelve %C3%B1. Pega tu texto, presiona Codificar o Decodificar y el resultado aparece abajo. Todo ocurre dentro de tu navegador, así que un query string con tokens o datos de clientes nunca sale de tu equipo.
Hay dos modos. El modo componente usa encodeURIComponent y escapa todo lo que no sea letra, dígito o uno de estos: - _ . ! ~ * ' ( ). Eso incluye /, ?, & y =, por lo que sirve para un valor individual que va dentro de un query string. El modo URL completa usa encodeURI, que deja intactos los caracteres estructurales para que la dirección siga funcionando como dirección. El modo componente es el que necesitas casi siempre; el de URL completa es para arreglar una dirección que te pasaron con espacios o acentos adentro.
El percent-encoding trabaja sobre bytes, no sobre caracteres, y ahí está la trampa para el español. Cada byte se convierte en un % seguido de dos dígitos hexadecimales, y una letra acentuada en UTF-8 ocupa dos bytes: la é es un solo carácter pero son los bytes C3 A9, por eso queda como %C3%A9 y no como un solo triplete. Lo mismo pasa con la ñ (%C3%B1), la ü (%C3%BC) y los signos de apertura ¿ (%C2%BF) y ¡ (%C2%A1). El RFC 3986 considera %c3%a9 y %C3%A9 equivalentes y recomienda mayúsculas al normalizar.
Dos errores explican casi todos los problemas. El primero es la doble codificación: si pasas el mismo texto por un codificador dos veces, cada % se vuelve %25 y caf%C3%A9 termina como caf%25C3%25A9. Cuando veas %25 en una URL, algo codificó un texto que ya estaba codificado, y una sola pasada de decodificación no alcanza. El segundo es el signo +. En los query strings de formularios el + significa espacio, pero decodeURIComponent no lo sabe y te devuelve un + literal. Esta herramienta convierte todo + en espacio antes de decodificar, lo cual es correcto para datos de formulario y equivocado si tu valor lleva un más de verdad — una firma en base64, o un teléfono en formato +1. En ese caso el + debía haberse codificado como %2B antes de llegar a la URL.
Un aviso sobre el dominio: las tildes y la ñ del nombre de dominio no se codifican con porcentajes. Ahí manda Punycode, así que españa.com viaja como xn--espaa-rta.com; solo la ruta, el query y el fragmento usan percent-encoding. Y si armas URLs desde código, no las concatenes a mano: los objetos URL y URLSearchParams se encargan del escapado, de unir los parámetros y de la convención del +. Esta herramienta es para inspeccionar, depurar y arreglar URLs que ya existen, no para construirlas.
Tabla de caracteres reservados (RFC 3986) y cómo se codifican las tildes
El RFC 3986 divide el ASCII en tres grupos. Los no reservados — A–Z, a–z, 0–9 y - . _ ~ — son siempre seguros. Los reservados son los delimitadores que le dan estructura a la URL: se codifican solo cuando el carácter es dato y no puntuación. Todo lo demás no tiene lugar legal dentro de una URL y hay que codificarlo siempre. Los reservados se dividen en gen-delims, que separan las partes grandes de la dirección, y sub-delims, que se usan dentro de esas partes.
| Carácter | Codificado | Qué delimita |
|---|---|---|
| : | %3A | Cierra el esquema (https:) y separa el host de su puerto |
| / | %2F | Separa segmentos de ruta; // al inicio abre la autoridad |
| ? | %3F | Empieza el query string |
| # | %23 | Empieza el fragmento — nada de lo que sigue llega al servidor |
| [ | %5B | Abre un host IPv6 literal, como en http://[::1]/ |
| ] | %5D | Cierra un host IPv6 literal |
| @ | %40 | Separa el userinfo del host, como en usuario@ejemplo.com |
Los sub-delims son los otros once reservados: ! $ & ' ( ) * + , ; = — codificados %21 %24 %26 %27 %28 %29 %2A %2B %2C %3B %3D. En un query string los que de verdad importan son & (separa un parámetro del siguiente), = (separa el nombre del valor) y + (que en datos de formulario se lee como espacio). Detalle útil: encodeURIComponent deja sin escapar ! ’ ( ) * aunque el RFC los lista como reservados. Y lo que no esté en ninguno de esos grupos va codificado sí o sí: el espacio es %20 y el propio signo de porcentaje es %25, porque es el carácter de escape.
Las letras con tilde, la ñ y los signos de apertura ocupan dos bytes en UTF-8, así que cada uno produce dos tripletes. Esta es la tabla para cuando lees un log o depuras una búsqueda en español:
| Carácter | Bytes UTF-8 | Percent-encoding |
|---|---|---|
| á | C3 A1 | %C3%A1 |
| é | C3 A9 | %C3%A9 |
| í | C3 AD | %C3%AD |
| ó | C3 B3 | %C3%B3 |
| ú | C3 BA | %C3%BA |
| ñ / Ñ | C3 B1 / C3 91 | %C3%B1 / %C3%91 |
| ü | C3 BC | %C3%BC |
| ¿ / ¡ | C2 BF / C2 A1 | %C2%BF / %C2%A1 |
Ojo con el dominio: ahí no se usa percent-encoding. Un nombre de dominio con tildes o ñ se convierte a Punycode con el prefijo xn--, de modo que españa.com viaja como xn--espaa-rta.com y piñata.mx como xn--piata-pta.mx. Si codificas el host con %C3%B1 la dirección no resuelve. Solo la ruta, el query y el fragmento usan porcentajes.
Entrada https://ejemplo.com/búsqueda?q=café con leche&x=a+b#top
URL completa https://ejemplo.com/b%C3%BAsqueda?q=caf%C3%A9%20con%20leche&x=a+b#top
Componente https%3A%2F%2Fejemplo.com%2Fb%C3%BAsqueda%3Fq%3Dcaf%C3%A9%20con%20leche%26x%3Da%2Bb%23topPor último, si el destino es un formulario y no una URL: URLSearchParams escribe los espacios como + (caf%C3%A9+con+leche) y encodeURIComponent como %20 (caf%C3%A9%20con%20leche). Los dos son válidos — el + viene de application/x-www-form-urlencoded, el formato que los formularios HTML usan desde los años noventa y que el estándar URL del WHATWG todavía especifica. El problema aparece cuando el servidor adivina mal cuál está leyendo. Al decodificar, esta herramienta asume el formato de formulario y convierte cada + en espacio.
Tablas de referencia
Preguntas frecuentes
¿Cuándo uso modo componente vs URL completa?
Usa modo componente para un valor individual dentro de un query string. Usa modo URL completa cuando codificas una URL entera cuyas barras y signos de interrogación deben quedar intactos.
¿Por qué mi texto decodificado muestra caracteres raros?
Probablemente estaba doblemente codificado. Decodifícalo una segunda vez.
¿El signo + significa espacio?
En query strings, históricamente sí. Esta herramienta decodifica + como espacio al decodificar, y codifica espacios como %20.