URL decode y URL encode online: codificar y decodificar URL con caracteres especiales
Elige Encode o Decode y pega el texto: el resultado se actualiza mientras escribes. Al codificar, indica qué estás codificando: un solo valor de parámetro o un segmento de ruta, que escapa todos los caracteres reservados, o una URL completa, que conserva `:`, `/`, `?`, `&` y `=` para que la dirección siga funcionando. Al decodificar, marca Treat + as space si el texto viene de un formulario HTML. Todo ocurre en tu navegador, así que las URL con tokens o datos personales no salen de tu equipo.
Qué es la codificación URL
Una URL solo puede contener un conjunto limitado de caracteres ASCII. La RFC 3986 define los caracteres no reservados, A-Z, a-z, 0-9, -, ., _ y ~, que nunca necesitan codificarse. Todo lo demás se escribe con codificación porcentual (percent-encoding): cada byte se convierte en % seguido de dos dígitos hexadecimales. El texto que no es ASCII se pasa antes a bytes UTF-8, por eso una sola letra con tilde o una ñ ocupa dos escapes.
espacio %20
& %26
= %3D
/ %2F
ñ %C3%B1 (2 bytes en UTF-8)
é %C3%A9 (2 bytes)
€ %E2%82%AC (3 bytes)
😀 %F0%9F%98%80 (4 bytes)
Los caracteres reservados como /, ?, #, & y = tienen un papel estructural en la URL. Hay que codificarlos cuando forman parte de un dato, por ejemplo un & dentro de un término de búsqueda, y dejarlos tal cual cuando separan las partes de la dirección. Esa diferencia es la razón de que la herramienta tenga dos modos de codificación.
Codificar un parámetro o una URL completa
La opción Query value / path segment usa encodeURIComponent de JavaScript. Escapa todo salvo letras, dígitos y - _ . ! ~ * ' ( ), que es lo que necesitas para un único valor: un término de búsqueda, una URL de redirección pasada como parámetro o un nombre de archivo dentro de una ruta.
La opción Full URL usa encodeURI, que respeta los caracteres que dan estructura a la URL y solo escapa los espacios, los caracteres no ASCII y unos pocos más. Sirve para limpiar una dirección completa con espacios o tildes, nunca para codificar un valor que vas a insertar dentro de otra URL.
encodeURIComponent('año 2026 & más/ñ?')
// 'a%C3%B1o%202026%20%26%20m%C3%A1s%2F%C3%B1%3F'
encodeURI('https://ejemplo.com/búsqueda?q=café con leche&p=1#top')
// 'https://ejemplo.com/b%C3%BAsqueda?q=caf%C3%A9%20con%20leche&p=1#top'
El error clásico es montar una query string concatenando valores sin codificar o con encodeURI. Un valor que contiene & se parte en dos parámetros y uno que contiene # corta el resto de la URL. Codifica cada valor por separado o deja que lo haga URLSearchParams.
El espacio: %20 o +
Las dos formas existen. En la ruta de una URL, el espacio tiene que ser %20. En las query strings que envían los formularios HTML, el formato application/x-www-form-urlencoded escribe el espacio como +, y siguen esa convención URLSearchParams en JavaScript, urlencode en PHP, quote_plus en Python y URLEncoder.encode en Java.
decodeURIComponent no convierte + en espacio, porque en una URL genérica el + es un signo más literal. Si decodificas datos de un formulario, marca Treat + as space: caf%C3%A9+con+leche pasa a ser café con leche en lugar de café+con+leche. Si el valor puede contener un signo más real, como un teléfono con prefijo internacional o una cadena Base64, deja la casilla sin marcar.
new URLSearchParams({ q: 'café con leche&pan' }).toString()
// 'q=caf%C3%A9+con+leche%26pan'
urlencode('año 2026/más'); // PHP: 'a%C3%B1o+2026%2Fm%C3%A1s'
rawurlencode('año 2026/más'); // PHP: 'a%C3%B1o%202026%2Fm%C3%A1s'
Errores al decodificar y doble codificación
La decodificación falla con URIError: URI malformed cuando un % no va seguido de dos dígitos hexadecimales, como en 100%, o cuando los escapes no forman UTF-8 válido, por ejemplo un %E0%A4%A cortado. La herramienta muestra ese error en rojo en lugar de un resultado. Un signo de porcentaje que forma parte de los datos debe codificarse como %25.
La doble codificación ocurre cuando se vuelve a codificar un texto ya codificado: %20 se convierte en %2520, porque el % pasa a %25. Si después de decodificar todavía ves %20 o %3D, decodifica otra vez y busca en tu código el punto donde se codifica dos veces; suele ser un framework que codifica los parámetros automáticamente después de que tú ya lo hiciste.
Codificar URL en código
# Python
from urllib.parse import quote, quote_plus, urlencode
quote('año 2026/más') # 'a%C3%B1o%202026/m%C3%A1s' la / se conserva
quote('año 2026/más', safe='') # 'a%C3%B1o%202026%2Fm%C3%A1s'
quote_plus('año 2026/más') # 'a%C3%B1o+2026%2Fm%C3%A1s'
urlencode({'q': 'café con leche', 'p': 2}) # 'q=caf%C3%A9+con+leche&p=2'
quote de Python conserva la / salvo que pases safe='', algo que sorprende al codificar un valor que contiene una barra. En JavaScript, lo más seguro es construir la URL con new URL() y url.searchParams.set(), que codifican cada valor por ti:
const u = new URL('https://ejemplo.com/buscar');
u.searchParams.set('q', 'a b&c');
u.searchParams.set('redirect', 'https://otro.com/?x=1&y=2');
u.href
// 'https://ejemplo.com/buscar?q=a+b%26c&redirect=https%3A%2F%2Fotro.com%2F%3Fx%3D1%26y%3D2'
Dónde importa la codificación URL
Las URL de redirección y de callback pasadas como parámetro, como ?redirect= o el redirect_uri de OAuth, deben ir completamente codificadas; si no, la query string de la URL interna se mezcla con la externa. Los parámetros UTM de campañas con espacios o & en el nombre, los parámetros que añaden las plataformas de anuncios, las llamadas a APIs con términos de búsqueda, los nombres de archivo en enlaces de descarga y los enlaces mailto: con asunto y cuerpo dependen de ella. Pega cualquiera en el decodificador para ver qué recibirá realmente el servidor.
Frequently asked questions
¿Cómo decodifico una URL?
Elige Decode y pega el texto codificado. Los escapes como %20 o %C3%B1 se convierten de nuevo en caracteres. Marca Treat + as space si el texto viene de un formulario HTML.
¿Qué diferencia hay entre encodeURI y encodeURIComponent?
encodeURIComponent escapa todos los caracteres reservados y sirve para valores sueltos. encodeURI conserva caracteres como :, /, ?, & y = para que una URL completa siga funcionando, y no debe usarse para valores dentro de una URL.
¿Por qué el espacio aparece como + en lugar de %20?
Los formularios HTML usan el formato application/x-www-form-urlencoded, donde el espacio es +. En las rutas y en la codificación genérica el espacio es %20. En las query strings de formularios, ambos significan un espacio.
¿Qué significa %2520 en una URL?
Que el texto se codificó dos veces: el % de %20 se volvió a codificar como %25. Decodifica dos veces para recuperar el original y corrige el código que codifica de más.
¿Qué caracteres especiales hay que codificar en una URL?
Todo lo que no sea letra ASCII, dígito, guion, punto, guion bajo o virgulilla, cuando forma parte de un dato. Eso incluye espacios, tildes, ñ, &, =, ?, #, / y %.
¿La codificación URL es un cifrado?
No. Solo hace que el texto sea seguro dentro de una URL, y cualquiera puede decodificarlo. No sirve para ocultar tokens ni datos personales.