URL

Codificar y decodificar URL online

Los dos sentidos a la vez, con acentos, eñes y emojis bien resueltos. Y dos cosas que casi nadie ofrece: abrir la dirección en sus partes y editar sus parámetros en una tabla, y montar enlaces de campaña con su código QR.

Cero subidas · todo en tu navegador

Las direcciones que pegas no salen de esta página.

Por qué importa que esto no se suba

Una dirección parece un dato público, y casi nunca lo es. Las que se pegan en una herramienta como esta llevan identificadores de sesión, rutas internas del panel de administración, referencias de cliente, claves de un solo uso para recuperar una contraseña o páginas que todavía no se han publicado. Cualquiera de esas cosas en el registro del servidor de un desconocido es un problema, y a cambio de nada: convertir un espacio en %20 no necesita ningún servidor. Aquí no hay a dónde enviarlo.

Cómo funciona, en 3 pasos

  1. Pega en cualquiera de los dos lados

    Escribe texto normal a la izquierda y sale codificado a la derecha, o pega algo codificado a la derecha y sale en claro a la izquierda. Se actualiza mientras escribes.

  2. Elige qué estás codificando

    Un valor suelto o una dirección entera. El ejemplo de arriba enseña la diferencia con la misma frase en los dos modos, que es justo donde se equivoca todo el mundo.

  3. O pasa a las otras pestañas

    Abrir una dirección en sus partes y editar sus parámetros, montar un enlace de campaña con su QR, o pegar un enlace larguísimo y ver en claro qué lleva dentro.

Para qué la usa la gente

Los dos modos, y por qué elegir mal rompe el enlace

Es la duda que trae aquí a más gente, y tiene una explicación de una línea: la diferencia está en si se codifican los caracteres que dan estructura a la dirección —los dos puntos, las barras, el interrogante, la almohadilla, el ampersand y el igual—.

Con la misma frase de partida, https://ejemplo.com/mi página?q=café:

  • Como valor suelto sale https%3A%2F%2Fejemplo.com%2Fmi%20p%C3%A1gina%3Fq%3Dcaf%C3%A9. Ya no es una dirección: es un texto. Y eso es exactamente lo que hace falta para meterlo dentro del parámetro de otra dirección, que es de donde salen esos url=https%3A%2F%2F… que se ven por todas partes.
  • Como dirección entera sale https://ejemplo.com/mi%20p%C3%A1gina?q=caf%C3%A9. Sigue siendo una dirección, con sus barras y su interrogante intactos, pero con el espacio y el acento arreglados. Es lo que hace falta para reparar una dirección que ya lo es.

Equivocarse falla en las dos direcciones. Codificar una dirección entera como si fuera un valor la convierte en un texto que no lleva a ninguna parte. Y codificar un valor como si fuera una dirección deja sin tocar las barras y los ampersands que lleve dentro, así que la dirección se parte por sitios donde no debía partirse y el destino recibe medio parámetro.

Por qué aparecen los %20

Porque una dirección solo puede llevar un puñado de caracteres, y el espacio no está entre ellos. Cuando hace falta uno que no está permitido se sustituye por un signo de porcentaje seguido de su número en hexadecimal. El espacio es el carácter número 32, que en hexadecimal es 20; de ahí %20, y de ahí el nombre del sistema: codificación por porcentaje.

Con los acentos hay un paso más. La eñe no tiene un número por debajo de 256, así que primero se convierte a bytes UTF-8 —la eñe son dos: C3 y B1— y luego cada byte se escribe con su porcentaje: %C3%B1. El euro son tres bytes y un emoji son cuatro, que es por lo que un emoji ocupa doce caracteres codificado. Aquí eso se hace bien; es donde fallan bastantes herramientas, que se quedan en los 256 primeros caracteres y devuelven basura en cuanto aparece una tilde.

Ver %20 en una dirección no es un error: es la forma correcta de escribirla, y el navegador la deshace al mostrarla. Solo se ve cuando alguien la copia y la pega en un sitio donde nadie la traduce de vuelta.

El signo + y el malentendido que arrastra

En la cadena de consulta —lo que va después del interrogante— un signo más significa espacio. Viene del formato con el que los formularios web mandan sus datos, y sigue vivo en la mitad de internet. En el resto de la dirección, un más es un más.

El problema es que la función que usan casi todas las herramientas para decodificar no sabe nada de eso: devuelve el más tal cual. Por eso pegas Juan+P%C3%A9rez y te sale Juan+Pérez en lugar de Juan Pérez. Aquí es una casilla, encendida por defecto porque es lo que quieres casi siempre. Y al revés funciona igual de bien: un más que de verdad es un más se codifica como %2B, así que C++ vuelve intacto aunque la casilla esté encendida.

Codificar dos veces: de dónde sale el %2520

El signo de porcentaje también es especial, así que él mismo tiene que codificarse: su código es %25. Si coges un %20 —que ya es un espacio codificado— y lo vuelves a codificar, el porcentaje se convierte en %25 y te queda %2520.

Al abrirlo, el navegador deshace una sola capa: donde tenía que ver un espacio ve el texto literal «%20», busca un archivo que no existe y devuelve un error. Pasa cuando un enlace atraviesa dos sistemas y cada uno codifica por su cuenta sin comprobar si ya venía codificado. La herramienta lo detecta y lo dice, con la secuencia concreta y lo que era antes. La solución es decodificar hasta que dejen de aparecer secuencias, o codificar el original una sola vez.

Enlaces de campaña, y el detalle que parte los informes

Los cinco campos UTM son la forma estándar de decirle a la analítica de dónde viene cada visita, y los entiende cualquier herramienta sin configurar nada. Tres importan casi siempre —fuente, medio y campaña— y dos son opcionales.

El fallo que más informes estropea no es escribirlos mal: es escribirlos de dos maneras distintas. La analítica distingue mayúsculas, así que «Facebook» y «facebook» son dos fuentes diferentes y la misma campaña sale partida en dos filas que hay que sumar a mano. Lo mismo con los espacios, que aparecen en el informe como %20 o como signos de más. Aquí se avisa de las dos cosas antes de que ocurra, y hay una casilla para normalizarlo todo automáticamente.

Un detalle más: si la dirección de destino ya llevaba campos de campaña, se sustituyen en su sitio en vez de añadirse otra vez. Pegar dos veces el mismo enlace es la forma habitual de acabar con dos campañas para un mismo clic.

El enlace final sale con su código QR descargable, para un cartel o un folleto. Si necesitas algo más elaborado —con logotipo, colores, o de otro tipo de contenido— el sitio tiene un generador de códigos QR completo.

Los nombres de dominio disfrazados

Un dominio puede escribirse con letras de cualquier alfabeto, pero por debajo viaja convertido a una forma que empieza por xn--. Es lo que permite que exista españa.com, y también lo que permite escribir un dominio que parece el de una marca conocida usando una letra de otro alfabeto que se ve idéntica.

Cuando el analizador ve una dirección así, la traduce de vuelta y te enseña qué pone en realidad. Es un dato que casi ninguna herramienta da y que se agradece justo cuando toca decidir si pulsar un enlace o no.

Qué se codifica y qué no

Todas las equivalencias de esta tabla salen del mismo motor que usa la herramienta de arriba, así que no pueden contradecirla. Un guion en la columna significa que ese carácter no se toca en ese modo.

Los que se codifican siempre

CarácterNombreComo valorComo direcciónPor qué
Espacio%20%20No está permitido en una dirección. Es el caso más frecuente con diferencia.
"Comillas%22%22Delimitan atributos en HTML y romperían el marcado.
%Porcentaje%25%25Es el propio símbolo del sistema: si no se codifica, todo lo que le sigue se lee mal.
< >Menor y mayor%3C %3E%3C %3EAbren y cierran etiquetas.
{ } | \ ^ `Llaves, barra vertical, contrabarra, circunflejo, tilde grave%7B %7D %7C %5C %5E %60igualNunca han estado permitidos, aunque algunos navegadores los toleren.
[ ]Corchetes%5B %5D%5B %5DReservados para las direcciones de red modernas, que van entre corchetes.
Salto de líneaNueva línea%0A%0APartiría la petición en dos.
TabuladorTabulación%09%09Igual que el salto de línea.

Los que dependen del modo (los que dan estructura)

CarácterNombreComo valorComo direcciónQué separa
/Barra%2F— sin tocarLas carpetas de la ruta.
:Dos puntos%3A— sin tocarEl protocolo del resto, y el servidor del puerto.
?Interrogación%3F— sin tocarDonde empieza la cadena de consulta.
#Almohadilla%23— sin tocarDonde empieza el fragmento.
&Ampersand%26— sin tocarUn parámetro del siguiente.
=Igual%3D— sin tocarEl nombre de un parámetro de su valor.
+Más%2B— sin tocarEn una consulta significa espacio, así que un más de verdad hay que codificarlo.
@Arroba%40— sin tocarEl usuario del servidor.
; , $Punto y coma, coma, dólar%3B %2C %24— sin tocarReservados por si acaso; algunos sistemas los usan como separadores propios.

Los cinco raros, y el modo estricto

CarácterNombreNormalEstrictoCuándo importa
!Exclamación— sin tocar%21El RFC 3986 los considera reservados, pero la función que traen los navegadores los deja pasar. Da igual el 95 % de las veces y rompe el otro 5 %: un paréntesis dentro de un enlace de Markdown lo parte por la mitad, y una comilla simple atraganta a algunos analizadores antiguos.
'Comilla simple— sin tocar%27
(Paréntesis abre— sin tocar%28
)Paréntesis cierra— sin tocar%29
*Asterisco— sin tocar%2A

Los que no se codifican nunca, y los que siempre

CarácterNombreResultadoNota
a–z A–ZLetras sin acento— sin tocarSon los no reservados del RFC 3986: seguros en cualquier parte de una dirección y en cualquier modo.
0–9Cifras— sin tocar
- _ . ~Guion, guion bajo, punto, virgulilla— sin tocarLos cuatro signos que se libran. Por eso los identificadores se escriben con guiones.
ñEñe%C3%B1Dos bytes en UTF-8, dos secuencias.
á é í ó ú üVocales acentuadas%C3%A1…Igual: dos bytes cada una.
€Euro%E2%82%ACTres bytes.
🚀Emoji%F0%9F%9A%80Cuatro bytes: doce caracteres una vez codificado.

Preguntas frecuentes

¿Por qué aparecen los %20 en una dirección?

Porque una dirección solo admite un puñado de caracteres y el espacio no está entre ellos. Cuando hace falta uno prohibido se escribe con un porcentaje y su número en hexadecimal: el espacio es el 32, que en hexadecimal es 20.

Con los acentos hay un paso más: primero se pasan a bytes UTF-8 y luego cada byte lleva su porcentaje, así que la eñe es %C3%B1 y un emoji ocupa doce caracteres. Ver un %20 no es un error: el navegador lo deshace al mostrarlo, y solo se ve cuando alguien pega la dirección donde nadie la traduce de vuelta.

¿Cuál es la diferencia entre codificar un valor y una dirección entera?

Si se codifican o no los caracteres que dan estructura: dos puntos, barras, interrogante, almohadilla, ampersand e igual.

Como valor se codifica todo, y el resultado ya no es una dirección sino un texto: es lo que hace falta para meterlo dentro del parámetro de otra dirección, de ahí los url=https%3A%2F%2F…. Como dirección entera se respetan esos separadores y solo se arreglan los caracteres prohibidos: sirve para reparar una dirección que ya lo es.

¿Por qué sale %2520 y el enlace no funciona?

Porque está codificado dos veces. El porcentaje también es especial y se codifica como %25: si vuelves a codificar un %20, te queda %2520.

Al abrirlo el navegador deshace una sola capa, ve el texto literal «%20» y busca un archivo que no existe. Ocurre cuando un enlace pasa por dos sistemas y los dos codifican. La herramienta lo detecta y te dice qué secuencia era antes.

¿El signo + es un espacio o es un más?

Depende de dónde esté. En la cadena de consulta significa espacio, por herencia del formato de los formularios web. En el resto de la dirección, un más es un más.

La función habitual de decodificar no lo sabe, y por eso otras herramientas te devuelven «Juan+Pérez» donde ponía «Juan Pérez». Aquí es una casilla, encendida por defecto. Y un más de verdad se codifica como %2B, así que C++ sobrevive intacto.

¿Qué caracteres hay que codificar?

Nunca hacen falta las letras sin acento, las cifras y cuatro signos: guion, guion bajo, punto y virgulilla. Los que dan estructura se codifican solo dentro de un valor. Y todo lo que no sea inglés se codifica siempre.

Quedan cinco casos raros —! ' ( ) *— que el RFC 3986 reserva pero que la función de los navegadores deja pasar; para eso está el modo estricto. La tabla completa está justo encima de estas preguntas.

¿Para qué sirven los parámetros UTM?

Para que la analítica sepa de dónde viene cada visita sin configurar nada. Un folleto con QR, un boletín y un anuncio pueden llevar a la misma página, y sin UTM las tres visitas se ven idénticas en el informe.

El detalle que rompe más informes es que la analítica distingue mayúsculas: «Facebook» y «facebook» son dos fuentes y parten la campaña en dos. Aquí se avisa antes de que pase. El enlace sale con su código QR; para algo más elaborado, el generador de códigos QR.

¿Qué aporta el analizador frente a pegar la dirección en el navegador?

Que la abre en piezas y deja cambiarlas. Protocolo, subdominio, dominio, sufijo, puerto, ruta y fragmento por separado, y los parámetros en una tabla donde se editan, se añaden y se quitan, con la dirección rehecha al instante.

Dos detalles: lo que no tocas sale exactamente como entró, sin recodificar nada por su cuenta; y si el dominio viaja disfrazado en punycode —esas direcciones que empiezan por xn--— se te dice qué pone en realidad.

¿Se envía a algún servidor la dirección que pego?

No. La codificación, el análisis, los enlaces de campaña y el propio código QR se calculan dentro de tu navegador. No hay cuentas ni base de datos, y no hay ninguna petición que lleve tu dirección a ninguna parte. Importa porque una dirección lleva identificadores de sesión, rutas internas, referencias de cliente o páginas sin publicar. Con la página ya cargada, desconecta internet y compruébalo: sigue funcionando igual.

Herramientas relacionadas