Saltar al contenido

Codificador y decodificador de URL

Codifica y decodifica URL y cadenas de consulta: un valor (encodeURIComponent) o URL completa (encodeURI). Divide una URL en protocolo, host, ruta y parámetros.

Dirección
0 caracteres · 0 líneas
Tipo de codificación
encodeURIComponent escapa también los delimitadores de URL como /, ?, & y #, así que úsalo para el valor de un solo parámetro de consulta. encodeURI deja esos delimitadores tal cual y solo escapa el resto, por eso se usa para una URL completa. Ejemplo: "a b/c?d" → «Un valor» da "a%20b%2Fc%3Fd", «URL completa» da "a%20b/c?d".

0 caracteres · 0 líneas

Analizador de la estructura de la URL

Analizador de la estructura de la URL

Introduce una URL completa para verla dividida en protocolo, host, ruta y parámetros de consulta.

https://example.com/path?query=1&lang=ko

Lo que introduces se procesa solo en este navegador y nunca se envía a un servidor. Cómo funciona

Codificación y decodificación URL entre hello world y hello%20world

Cómo usarlo

En esta página hay dos herramientas. La de arriba codifica o decodifica una cadena; la de abajo, «Analizador de la estructura de la URL», toma una URL completa y la muestra dividida en sus partes. Ninguna de las dos influye en la otra.

En la de arriba eliges «Codificar» o «Decodificar» en «Dirección» y después fijas dos cosas:

  • Tipo de codificación: «Un valor» es para un fragmento que vas a insertar en una URL, como el valor de un parámetro de consulta; «URL completa», para una cadena que ya tiene forma de dirección. La diferencia se explica en el apartado siguiente.
  • + como espacio (application/x-www-form-urlencoded): márcala solo cuando trabajes con los datos que envía un formulario HTML.

Al codificar, lo que escribes en «Texto original» sale en «Resultado codificado»; al decodificar, la «Cadena codificada» sale en «Resultado decodificado». € se codifica como %E2%82%AC: ese carácter ocupa 3 bytes en UTF-8, y por eso le corresponden tres %XX. «Enviar el resultado a decodificar» y «Enviar el resultado a codificar» llevan lo que acaba de salir a la entrada del sentido contrario.

«Un valor» y «URL completa» dejan intactos caracteres distintos

Los dos tipos sustituyen los caracteres que no pueden ir tal cual en una URL por % seguido de dos cifras hexadecimales (la codificación por porcentaje). Lo que los separa es el trato que dan a los caracteres que marcan la estructura de la URL, como /, ? y &. «Un valor» da el mismo resultado que encodeURIComponent de JavaScript, y «URL completa», el mismo que encodeURI.

Tipo de codificación Caracteres que deja sin cambiar
Un valor letras inglesas, cifras y - _ . ! ~ * ' ( )
URL completa todos los anteriores y además ; / ? : @ & = + $ , #

Con la misma entrada, https://example.com/café?q=crème brûlée&page=1#menü, cada tipo da esto:

  • URL completa: https://example.com/caf%C3%A9?q=cr%C3%A8me%20br%C3%BBl%C3%A9e&page=1#men%C3%BC
  • Un valor: https%3A%2F%2Fexample.com%2Fcaf%C3%A9%3Fq%3Dcr%C3%A8me%20br%C3%BBl%C3%A9e%26page%3D1%23men%C3%BC

La primera se puede usar directamente como dirección. La segunda no, pero cabe entera como valor de un parámetro de otra URL (?redirect=...). En el caso opuesto, si quieres pasar la búsqueda a/b&c como valor de consulta y usas «URL completa», el & se queda como está y se lee como el comienzo del parámetro siguiente. Ahí toca usar «Un valor» para obtener a%2Fb%26c.

Al decodificar la diferencia es la misma: «URL completa» no deshace la codificación de los caracteres de estructura. Con a%2Fb%3Fc%26d%23e%20f, «Un valor» devuelve a/b?c&d#e f y «URL completa» devuelve a%2Fb%3Fc%26d%23e f. Si después de decodificar siguen ahí %2F o %26, prueba a cambiar el tipo de codificación a «Un valor».

Un detalle que conviene recordar: ni siquiera «Un valor» cambia ! ' ( ) *. Si el valor va a un servidor que exige codificar también esos caracteres, tendrás que sustituirlos tú en el resultado por %21, %27, %28, %29 y %2A.

+ como espacio

Los datos que envía un <form> de HTML (application/x-www-form-urlencoded) escriben el espacio como + y no como %20. Marca «+ como espacio» cuando tengas que generar o leer ese formato.

Dirección Entrada Sin la opción Con la opción
Codificar (Un valor) a+b c a%2Bb%20c a%2Bb+c
Codificar (URL completa) a+b c a+b%20c a%2Bb+c
Decodificar (Un valor) a+b%2Bc a+b+c a b+c

Con la opción marcada, un + que ya estuviera en el original se convierte en %2B para que no se confunda con un espacio. «URL completa» normalmente deja el + como está, pero con esta opción también lo pasa a %2B. Al decodificar sin la opción, un + es simplemente un +. Si copias de la dirección de una página de resultados un valor como q=crème+brûlée y, al decodificarlo, el + sigue ahí, es justo el caso en que hay que marcar la opción. En la ruta de una URL o en un nombre de archivo el + no significa espacio, así que ahí déjala sin marcar.

Qué valores muestra el analizador de la estructura

En el campo «URL completa», escribe una URL entera que empiece por el protocolo, como https://. Verás «Protocolo», «Host» y «Ruta», y además «Cadena de consulta» y «Hash» cuando los haya. Debajo, una tabla lista los parámetros de consulta, uno por fila, con su «Clave» y su «Valor (decodificado)». Si falta el protocolo, como en example.com/path, aparece «Esto no es una URL completa con protocolo (como https://).».

Lo que se muestra no es lo que tecleaste letra por letra, sino la URL tal como la interpreta y normaliza el navegador. Con https://Example.COM:443/a/../b/café?q=hello%20world&tag=a&tag=b&x=1+2#top sale esto:

Campo Valor mostrado En qué difiere de la entrada
Protocolo https
Host example.com pasa a minúsculas y desaparece el 443, que es el puerto por defecto de https
Ruta /b/caf%C3%A9 /a/.. se resuelve y la é aparece codificada
Cadena de consulta ?q=hello%20world&tag=a&tag=b&x=1+2 igual que la entrada
Hash #top

La tabla tiene cuatro filas: q = hello world, tag = a, tag = b y x = 1 2. Una clave que se repite ocupa tantas filas como veces aparece. Y, como se ve en el valor de x, esta tabla lee siempre el + como espacio, esté como esté la casilla «+ como espacio» de arriba: el estándar de URL establece que la cadena de consulta se interpreta con el formato de los datos de formulario.

Dos cosas más. Los dominios con caracteres que no son ASCII aparecen en «Host» en Punycode (https://café.example/ → xn--caf-dma.example). Y si la dirección lleva usuario y contraseña, como http://user:pw@host:8080/p, esa parte no se muestra en ningún campo: en «Host» solo sale host:8080.

Entradas que no se pueden decodificar

La decodificación solo sale bien si detrás de cada % hay dos cifras hexadecimales y los bytes así reunidos forman caracteres UTF-8. En cuanto algo no cuadra, no hay resultado y aparece un mensaje que empieza por «La codificación por porcentaje no es válida.».

Entrada Por qué falla
100% No hay nada detrás del %. El propio signo de porcentaje se escribe %25
%zz zz no es hexadecimal
%E2%82 Al carácter € (%E2%82%AC), de 3 bytes, le falta el último byte. Pasa al copiar una dirección larga cortándola por la mitad

Codificar, en cambio, no falla nunca. Incluso una entrada que por sí sola no llega a ser un carácter, como medio emoji, se codifica como el carácter de sustitución (%EF%BF%BD) en lugar de dar error.

Fuentes

Preguntas frecuentes

¿Qué pasa si codifico otra vez una cadena que ya estaba codificada?

Que cada % se convierte en %25 y tienes una doble codificación. Al codificar %20 con el tipo «Un valor» sale %2520, y al decodificarlo una vez no obtienes un espacio, sino %20. Si en una dirección ves %25 repetido, o al decodificar siguen quedando secuencias %XX, es que en algún punto se codificó dos veces. Decodifica las veces que haga falta hasta llegar al original; el botón que envía el resultado a decodificar te deja encadenar los pasos.

Tengo la dirección de una web antigua con algo como caf%E9 y no se decodifica.

Es porque esa dirección se generó con una codificación de caracteres que no era UTF-8. Esta herramienta interpreta los bytes escritos como %XX únicamente en UTF-8, y cuando una combinación de bytes no encaja en UTF-8 la trata como codificación por porcentaje no válida. Lo mismo ocurre con la notación antigua que empieza por %u, como %u00e9. Estas cadenas no se pueden recuperar aquí.

Si pongo en el analizador de la estructura una URL con la codificación por porcentaje rota, ¿da error?

No. El decodificador de arriba rechaza la entrada entera en cuanto hay un solo % incorrecto, pero el analizador lee hasta donde puede. Con https://example.com/?q=%zz&r=%E2%82 muestra el valor de q tal cual, %zz, y el de r como el símbolo que representa un carácter dañado (�). Los bytes que no se pueden leer como UTF-8 pueden aparecer con este símbolo. Comprueba si el valor está incompleto o usa otra codificación. El símbolo también podría estar en el texto original, así que por sí solo no permite determinar la causa.

Última actualización: