Codifica o decodifica URL y cualquier texto
Codifica con porcentajes un valor de consulta, un segmento de ruta o una URL entera, o convierte las secuencias %XX en texto legible. Admite UTF-8, espacios con + al estilo de formulario y un valor por línea. Nada sale de tu navegador.
Cómo codificar o decodificar una URL
- Pega el texto, el valor o la URL en el cuadro de entrada.
- Elige el tipo de codificación. Para un único valor de consulta o segmento de ruta, deja Componente. Para una dirección completa a la que solo hay que arreglar los espacios y las letras no ASCII, elige URL completa. Para datos que se leerán como el envío de un formulario HTML, elige Formulario.
- Pulsa Codificar o Decodificar. Con Un valor por línea marcado, cada línea se procesa por separado, así que puedes convertir de una vez una lista entera de parámetros o de URL.
- Copia el resultado o pulsa Usar el resultado como entrada para volver a procesarlo, por ejemplo para deshacer un valor que se codificó dos veces.
Cuando decodificas una URL completa con cadena de consulta, la herramienta también muestra en texto legible el nombre y el valor de cada parámetro, que es la forma más rápida de leer una URL larga de seguimiento o de redirección.
Qué es la codificación porcentual
Una URL solo puede contener un conjunto limitado de caracteres ASCII, y varios de ellos tienen una función: ? abre la consulta, & separa parámetros, # abre el fragmento y / separa los segmentos de la ruta. La codificación porcentual es la forma de meter todo lo demás. Cada carácter se convierte en sus bytes UTF-8 y cada byte se escribe como % más dos dígitos hexadecimales. Un espacio es un byte, así que pasa a %20; é son dos bytes, %C3%A9; un emoji como 😀 son cuatro, %F0%9F%98%80. Decodificar hace el camino inverso.
Las reglas vienen de la RFC 3986, sección 2, el estándar que define la sintaxis de los URI. Recomienda dígitos hexadecimales en mayúsculas (%3A, no %3a), indica que el texto debe codificarse primero como bytes UTF-8 y advierte de que las implementaciones no deben codificar ni decodificar una misma cadena más de una vez.
Caracteres reservados y no reservados (RFC 3986)
La RFC 3986 divide los caracteres que puede contener una URL en dos grupos:
- No reservados: las letras
A–Z a–z, los dígitos0–9y- . _ ~. No necesitan codificación nunca y significan lo mismo codificados o no. - Reservados: los delimitadores generales
: / ? # [ ] @y los subdelimitadores! $ & ' ( ) * + , ; =. Pueden aportar estructura, así que cuando uno de ellos forma parte de tus datos y no de la sintaxis de la URL, hay que codificarlo con porcentajes.
Todo lo demás, incluidos los espacios, el propio %, las comillas, los corchetes angulares y cualquier carácter no ASCII, no se permite tal cual en una URL y siempre necesita codificación. Los más habituales:
| Carácter | Codificado | Por qué importa |
|---|---|---|
| espacio | %20 (o + en datos de formulario) | No está permitido en las URL |
& | %26 | Empezaría un nuevo parámetro de consulta |
= | %3D | Separaría el nombre de un parámetro de su valor |
? | %3F | Empezaría la cadena de consulta |
# | %23 | Mandaría todo lo que sigue al fragmento, que nunca se envía al servidor |
/ | %2F | Crearía un segmento de ruta adicional |
+ | %2B | Se leería como un espacio en las cadenas de consulta de formulario |
% | %25 | Se leería como el inicio de una secuencia de escape |
: @ | %3A %40 | Delimitan el esquema, las credenciales y el host |
é | %C3%A9 | No ASCII: se codifica como sus dos bytes UTF-8 |
Componente, URL completa, RFC 3986 o formulario: cuál usar
La misma entrada se codifica de forma distinta según adónde vaya a parar el resultado. Con la entrada Tom & Jerry's (2024)/ü:
- Componente da
Tom%20%26%20Jerry's%20(2024)%2F%C3%BC. Es elencodeURIComponentde JavaScript, que codifica todo salvo letras, dígitos y- _ . ! ~ * ' ( ). Úsalo para un valor de consulta, un segmento de ruta o una URL que vas a meter dentro del parámetro de otra URL, como el destino de una redirección. - RFC 3986 estricto da
Tom%20%26%20Jerry%27s%20%282024%29%2F%C3%BC. Codifica además! ' ( ) *, que la RFC 3986 reserva como subdelimitadores aunqueencodeURIComponentlos deje en paz. Úsalo cuando un analizador estricto o un esquema de firma de peticiones espere exactamente el conjunto de la RFC. - Formulario da
Tom+%26+Jerry%27s+%282024%29%2F%C3%BC. Sigue el formato application/x-www-form-urlencoded del estándar URL de WHATWG: solo las letras, los dígitos y* - . _quedan tal cual, y un espacio pasa a+. Es lo que envían un formulario HTML yURLSearchParams. - URL completa da
Tom%20&%20Jerry's%20(2024)/%C3%BC. EsencodeURI, que deja intactos; / ? : @ & = + $ , #porque da por hecho que ya cumplen su función en una URL completa. Úsalo solo para arreglar una dirección entera que contiene espacios o texto no ASCII. No lo uses nunca para un valor: un&dentro de un valor empezaría un parámetro nuevo sin avisar.
%20 o +: los espacios en las URL
Conviven dos convenciones. En la sintaxis de URL de la RFC 3986, un espacio es siempre %20 y un + es solo un signo más. En el formato de formulario que usan los navegadores al enviar un formulario con GET, un espacio se escribe como +, y el analizador de WHATWG para ese formato sustituye cada + por un espacio antes de decodificar los porcentajes. Así, ?q=a+b significa «a b» para un analizador de datos de formulario, mientras que /a+b en una ruta significa «a+b».
Por eso el decodificador tiene la opción Tratar + como espacio. Márcala para las cadenas de consulta que producen los formularios, los cuadros de búsqueda y la mayoría de las herramientas de analítica. Déjala desmarcada para las rutas y para los valores en los que el signo más es real, como una dirección de correo del tipo nombre+etiqueta@example.com, que se codifica como nombre%2Betiqueta%40example.com.
Lo mismo en código
- JavaScript:
encodeURIComponent()ydecodeURIComponent()para valores,encodeURI()para URL completas yURLSearchParamspara cadenas de consulta al estilo de formulario con espacios como+(consulta MDN). - Python:
urllib.parse.quote()deja/sin codificar por defecto y escribe los espacios como%20, para rutas;quote_plus()codifica/y escribe los espacios como+, para valores de formulario (consulta la documentación de Python). - PHP:
rawurlencode()sigue la RFC 3986 y escribe los espacios como%20;urlencode()los escribe como+(consulta el manual de PHP).
Problemas habituales al codificar URL
Doble codificación: %2520 en lugar de %20
Si una URL contiene %2520, %253A o algo parecido, alguien codificó una cadena que ya estaba codificada; %25 es el signo de porcentaje codificado. Decodifica una vez y revisa el resultado. La herramienta te avisa cuando un resultado decodificado aún contiene secuencias de porcentaje, y Usar el resultado como entrada te deja decodificar la capa siguiente. La solución en código es codificar cada valor exactamente una vez, en el momento de construir la URL.
Errores de «Malformed URI sequence»
Los decodificadores estrictos rechazan un % que no va seguido de dos dígitos hexadecimales y las secuencias de bytes que no son UTF-8 válido. Este decodificador es más indulgente: decodifica todas las secuencias válidas, deja tal cual un % suelto, sustituye los bytes no válidos por el carácter de reemplazo � y te avisa de que lo hizo, para que localices el punto roto en vez de quedarte sin nada.
Un valor que se corta en # o en &
Si un parámetro llega truncado, el valor contenía un # o un & sin codificar, normalmente porque la URL se montó concatenando cadenas o con la codificación de URL completa. Codifica el valor en modo Componente.
Codificar una URL entera la rompe
Pasar una URL completa por el modo Componente convierte https:// en https%3A%2F%2F. Eso solo es correcto si la URL es a su vez el valor de un parámetro dentro de otra URL. En los demás casos, codifica únicamente la parte que vas a insertar o usa el modo URL completa.
Otras herramientas para URL
Crea enlaces de campaña completos con el generador de UTM, quita los parámetros de seguimiento con el limpiador de URL o consulta cada salto de un enlace con el comprobador de redirecciones. Para convertir un script en un marcador de un clic, el generador de bookmarklets lo codifica con porcentajes por ti. Y si guardas páginas de referencia como la RFC mientras trabajas, Marqly las reúne en una biblioteca con búsqueda; mira Marqly para desarrolladores (en inglés).
Preguntas frecuentes
¿Qué hace la codificación de URL?
Sustituye los caracteres que no son seguros o que tienen un significado especial dentro de una URL por un signo de porcentaje y dos dígitos hexadecimales por cada byte UTF-8. Un espacio pasa a ser %20, & pasa a ser %26 y é pasa a ser %C3%A9. Así cualquier texto puede viajar dentro de una URL sin confundirse con la estructura de la propia URL.
¿Qué diferencia hay entre encodeURI y encodeURIComponent?
encodeURIComponent codifica todo salvo letras, dígitos y - _ . ! ~ * ' ( ), así que es la opción correcta para un valor de consulta o un segmento de ruta. encodeURI además deja intactos ; / ? : @ & = + $ , #, porque da por hecho que le pasas una URL completa y ya estructurada. Usa el modo Componente para valores y el modo URL completa solo para direcciones enteras.
¿Un espacio debe ser %20 o +?
Las dos formas son correctas, pero en sitios distintos. %20 vale en cualquier parte de una URL. El signo + significa espacio solo en las cadenas de consulta codificadas como formulario (application/x-www-form-urlencoded), que es lo que producen los formularios HTML y URLSearchParams. En una ruta, un + es un signo más literal. Al decodificar una cadena de consulta que viene de un formulario, marca Tratar + como espacio.
¿Por qué mi URL contiene %2520?
Porque se codificó dos veces. En la primera pasada un espacio pasó a %20; en la segunda, el propio % se codificó como %25 y salió %2520. La RFC 3986 dice que una misma cadena no debe codificarse ni decodificarse más de una vez. Decodifica una vez para ver si recuperas %20 y vuelve a decodificar.
¿Puedo codificar o decodificar muchas URL a la vez?
Sí. Pega un valor por línea y deja marcada la casilla Un valor por línea. Cada línea se codifica o decodifica por separado, de modo que los saltos de línea se conservan en lugar de convertirse en %0A.
¿Qué caracteres hay que codificar?
Todo lo que quede fuera del conjunto no reservado de la RFC 3986 (letras, dígitos, guion, punto, guion bajo y tilde) debe codificarse cuando forma parte de un valor y no de la estructura de la URL. Eso incluye espacios, letras no ASCII, % y los delimitadores reservados como ? # & = / : @ y +.
¿Se sube mi texto?
No. La codificación, la decodificación y el desglose de la cadena de consulta se ejecutan en tu navegador con funciones de JavaScript integradas. No se envía nada a ningún servidor.





