Codificador y decodificador de URL
Para un valor de consulta o un segmento de ruta. Codifica todo menos letras, dígitos y - _ . ! ~ * ' ( ), igual que encodeURIComponent.
Pega una URL arriba. Sus partes y parámetros aparecen aquí, listos para editar.
Parámetros de consulta
Esta URL no tiene parámetros de consulta.
Parámetros del fragmento
Todo funciona en tu navegador y nada de lo que pegas se sube. Importa, porque las URL suelen llevar tokens e ID de sesión.
Para codificar y decodificar URL online mientras escribes, esta herramienta convierte espacios, letras con tilde y símbolos como & o ? en secuencias con porcentaje como %20, y las devuelve a texto legible. La segunda pestaña es un analizador de URL. Divide cualquier dirección en protocolo, host, ruta y parámetros de consulta que puedes editar, desactivar o limpiar de etiquetas de seguimiento, y te escribe de vuelta la URL correctamente codificada. Todo ocurre en tu navegador.
Cómo codificar y decodificar una URL
- Escribe o pega en el campo de la pestaña Codificar / Decodificar. El Resultado se actualiza con cada pulsación.
- Elige la Dirección. Codificar hace que el texto sea seguro para una URL, Decodificar convierte
caf%C3%A9%20au%20laitde nuevo encafé au lait. Si pegas en el campo vacío un texto con secuencias como%20, la herramienta cambia sola a Decodificar (Codificarlo vuelve atrás). Si pegas en modo Decodificar un texto normal que necesita codificación, cambia igual a Codificar, con Decodificarlo para volver. - Al codificar, elige en Codificar como qué tipo de texto es (lo explica la sección siguiente). La opción por defecto, Valor de parámetro, es la adecuada para un único valor de consulta.
- Copiar pone el resultado en el portapapeles. Intercambiar pasa el resultado al campo de entrada y cambia la dirección. Es una comprobación rápida de ida y vuelta: al decodificar lo que acabas de codificar debe salir tu texto original.
Cada carácter que la herramienta ha cambiado aparece resaltado en el resultado. Pasa el cursor por encima para ver el carácter, su punto de código Unicode y sus bytes, por ejemplo é U+00E9 %C3%A9. Debajo de los campos ves el número de Caracteres, de Bytes UTF-8 y de Caracteres codificados (o Caracteres decodificados). Probar un ejemplo carga la frase Oferta: 50 % de descuento en café & piña, ¿te animas?, que tiene 53 caracteres pero 56 bytes UTF-8, porque la é, la ñ y el signo ¿ ocupan dos bytes cada uno.
Al codificar, Cada línea por separado codifica cada línea por su cuenta y conserva los saltos de línea, lo que va bien para una lista de valores o de enlaces. Sin esa opción, el salto de línea también se codifica y pasa a ser %0A. Cuando el texto es una URL con parámetros, la herramienta ofrece Dividirla en partes, que abre la dirección en la pestaña del analizador.
Codificar el parámetro de una URL, una URL completa o datos de formulario
No todos los caracteres hay que codificarlos en todas partes. Una barra separa carpetas en una ruta, pero es un dato normal dentro del valor de un parámetro, así que el resultado correcto depende de lo que codifiques. Codificar como ofrece cuatro modos:
- Valor de parámetro funciona como
encodeURIComponentde JavaScript y sirve para un valor de consulta o un segmento de ruta. Codifica todo salvo letras, dígitos y- _ . ! ~ * ' ( ), de modo que un&,=,/o?dentro del valor no puede romper la URL. Al codificarcafé & crèmesalecaf%C3%A9%20%26%20cr%C3%A8me, listo para ponerlo detrás deq=. - URL completa es para una dirección entera que solo necesita limpieza. Codifica espacios, caracteres que no son ASCII, caracteres de control, el acento grave y
" < > \ ^ { | }, y conserva todo lo que da estructura a una URL:: / ? # [ ] @ ! $ & ' ( ) * + , ; =. Así,https://example.com/search?q=café au lait&lang=frpasa ahttps://example.com/search?q=caf%C3%A9%20au%20lait&lang=fr. Las secuencias ya codificadas se quedan como están y un%suelto pasa a%25. Aquí se diferencia deencodeURIde JavaScript, que convierte un%20existente en%2520y codifica los corchetes de una dirección IPv6 comohttp://[2001:db8::1]:8080/. - Datos de formulario sigue el formato application/x-www-form-urlencoded (en inglés) que producen los formularios HTML y
URLSearchParams. El espacio se convierte en+, y solo letras, dígitos y* - . _quedan sin codificar, así que! ' ( ) ~también se codifican. - RFC 3986 estricto deja sin codificar solo los caracteres no reservados de RFC 3986 (en inglés): letras, dígitos y
- . _ ~. OAuth 1.0 (RFC 5849) y AWS Signature Version 4 exigen exactamente esta forma, porque una firma solo coincide si ambos lados codifican!o*de la misma manera.
Los mismos caracteres en cada modo:
| Carácter | Valor de parámetro | URL completa | Datos de formulario | RFC 3986 estricto |
|---|---|---|---|---|
| espacio | %20 | %20 | + | %20 |
& | %26 | & | %26 | %26 |
/ | %2F | / | %2F | %2F |
+ | %2B | + | %2B | %2B |
~ | ~ | ~ | %7E | ~ |
! | ! | ! | %21 | %21 |
* | * | * | * | %2A |
é | %C3%A9 | %C3%A9 | %C3%A9 | %C3%A9 |
El texto se codifica siempre como UTF-8 y los dígitos hexadecimales siempre van en mayúsculas. Si la entrada ya contiene secuencias como %20, un aviso lo indica y ofrece Decodificarlo, para que no codifiques el texto dos veces por error.
Para pasar JSON en un parámetro de consulta, minifícalo en el formateador JSON y codifícalo como Valor de parámetro: {"id":7,"tags":["a","b"]} se convierte en %7B%22id%22%3A7%2C%22tags%22%3A%5B%22a%22%2C%22b%22%5D%7D. También funciona al revés: decodifica aquí el parámetro y dale formato allí.
Problemas al decodificar URL: signos más, %2520 y secuencias rotas
Decodificar suele funcionar sin más, pero hay cuatro situaciones que confunden a la gente. La herramienta resuelve cada una en lugar de detenerse con un error:
- El signo más equivale a un espacio en los datos de formulario y en la mayoría de las cadenas de consulta. Decodificar + como espacio está activado por defecto, así que
caf%C3%A9+au+laitse decodifica comocafé au lait. En una URL completa solo cuentan como espacios los signos más posteriores al?, porque en una ruta el más es un carácter normal. Desactiva la opción cuando el signo más sea literal. Un más que se codificó como%2Bsiempre sigue siendo un signo más. - La doble codificación ocurre cuando dos capas de código codifican el mismo valor, algo que RFC 3986 desaconseja expresamente. Cada
%pasa a%25, de modo que un espacio pasa de%20a%2520. Si el resultado decodificado aún contiene secuencias como%20, la herramienta avisa de que el texto probablemente se codificó dos veces y ofrece Decodificar de nuevo. - Una secuencia no válida, un
%que no va seguido de dos dígitos hexadecimales como en100%o%G1, hace quedecodeURIComponentde JavaScript lance un URIError. Aquí esas secuencias se dejan tal cual, se marcan en rojo y se cuentan, y el resto del texto se decodifica. - Los enlaces antiguos en Latin-1 vienen de la época anterior a UTF-8, cuando algunos sitios codificaban
écomo el byte único%E9.caf%E9no es UTF-8 válido, así quedecodeURIComponentfalla yunquotede Python devuelvecafseguido del carácter de sustitución U+FFFD. La herramienta lee esos bytes como Windows-1252, decodificacaf%E9comocaféy añade una nota que lo indica.
Los caracteres de control del texto decodificado, como un tabulador o un byte nulo, se muestran como símbolos visibles como ␉ y ␀, pero Copiar copia el texto real.
Analizador de URL: dividir una URL y editar sus parámetros de consulta
Pega una dirección en el campo URL de la pestaña Analizar y editar URL y se divide en Protocolo, Host, Puerto, Ruta y Fragmento, además de Usuario y Contraseña cuando la URL los incluye. Los valores se muestran decodificados, así que la pestaña es también la forma más rápida de decodificar los parámetros de una URL: lees zapatos niño en lugar de zapatos+ni%C3%B1o. La edición funciona en los dos sentidos, como la barra de direcciones y la tabla de parámetros de Postman. Cambia un campo y la URL se reescribe al instante, bien codificada; cambia la URL y se vuelven a leer todas las partes. Las partes que no tocas se quedan exactamente como estaban, carácter por carácter.
La tabla Parámetros de consulta muestra cada parámetro con su Nombre y su Valor. Desmarca Incluir en la URL para dejar fuera un parámetro sin borrarlo, algo útil cuando buscas el parámetro que rompe una petición. Añadir parámetro, Quitar parámetro y Ordenar de A a Z hacen lo que dicen. Se conservan los nombres repetidos como tag=a&tag=b y los nombres sin valor como ?debug. Espacios en parámetros decide si los espacios se escriben como %20 o +; por defecto sigue la URL que has pegado.
Los enlaces de inicio de sesión y de pago suelen llevar una segunda URL dentro de un parámetro, codificada para que su propio ? y su & no se mezclen con los de la URL exterior:
https://auth.example.com/authorize?client_id=abc&redirect_uri=https%3A%2F%2Fapp.example.com%2Fcallback%3Ftab%3D2
Un valor que es a su vez una URL, normalmente en redirect_uri, return, url o next, recibe un botón Editar la URL interna. La dirección interior https://app.example.com/callback?tab=2 se abre como un nivel propio con sus partes y parámetros, una ruta de navegación (URL principal › redirect_uri) permite volver, y cada cambio se codifica de vuelta en la URL exterior. Copiar URL principal copia el resultado. Funciona en varios niveles de profundidad.
Cuando la parte posterior a # parece una lista de parámetros, como #access_token=...&state=... en el flujo implícito de OAuth o #/search?q=shoes en las rutas de las aplicaciones de una sola página, una segunda tabla, Parámetros del fragmento, también los lista.
El analizador señala además problemas: una URL sin protocolo, que los navegadores tratan como un enlace relativo; un puerto fuera del rango de 0 a 65535; y caracteres que deben codificarse, como espacios, letras con tilde, " o <, que Codificarlos corrige en un paso. Un texto sin dirección, como a=1&b=2, se lee como cadena de consulta. Para un nombre de dominio internacionalizado la herramienta muestra la forma Punycode que usan el DNS y los navegadores, de modo que münchen.de pasa a xn--mnchen-3ya.de, y un dominio que empieza por xn-- recibe su forma legible.
Copiar URL copia la dirección terminada, Abrir la abre en una pestaña nueva (solo enlaces http y https) y Copiar como JSON te da los parámetros como un objeto JSON, con los nombres repetidos reunidos en una lista.
Quitar UTM y otros parámetros de seguimiento de una URL
Los enlaces de boletines, anuncios y redes sociales llevan parámetros que solo indican al sitio de dónde viene el visitante. Los parámetros UTM utm_source, utm_medium, utm_campaign, utm_term y utm_content proceden de Urchin, el predecesor de Google Analytics. Los identificadores de clic como fbclid (Facebook), gclid (Google Ads) y msclkid (Microsoft Advertising) los añaden las propias plataformas.
El analizador los marca con la etiqueta seguimiento, y Quitar seguimiento (n) los elimina todos a la vez. Además de cualquier parámetro utm_*, reconoce más de 20 otros, como ttclid (TikTok), mc_cid (Mailchimp) y _hsenc (HubSpot). Los parámetros que la página necesita se quedan: en el enlace de tienda de Probar un ejemplo, Quitar seguimiento (4) elimina utm_source, utm_medium, utm_campaign y fbclid y conserva q, size, return y el fragmento #reviews.
Merece la pena limpiar aquí primero un enlace que vaya a un código QR. Sin parámetros de seguimiento es más corto, y un enlace más corto da un código menos denso y más fácil de escanear.
Qué es la codificación porcentual y cómo los caracteres se convierten en %XX
La codificación porcentual, también llamada codificación de URL, escribe un carácter como % seguido de dos dígitos hexadecimales. Una URL solo puede contener un conjunto limitado de caracteres ASCII, y algunos tienen una función: ? inicia la consulta, & separa parámetros, # inicia el fragmento. RFC 3986 los llama caracteres reservados (: / ? # [ ] @ y ! $ & ' ( ) * + , ; =). Las letras, los dígitos y - . _ ~ son no reservados y nunca necesitan codificarse. Todo lo demás, y todo carácter reservado usado como dato normal, se codifica.
Los caracteres fuera de ASCII se convierten primero en bytes UTF-8, y cada byte recibe su propio %XX:
ées U+00E9, que UTF-8 guarda como los dos bytes C3 A9, así que pasa a%C3%A9.€es U+20AC, tres bytes:%E2%82%AC.- Un emoji como U+1F600 (cara sonriente) ocupa cuatro bytes:
%F0%9F%98%80.
%c3%a9 y %C3%A9 significan lo mismo, pero RFC 3986 recomienda las mayúsculas, que es lo que escribe la herramienta. Una tabla de codificación porcentual con los caracteres que más te encontrarás:
| Carácter | Codificado | Carácter | Codificado |
|---|---|---|---|
| espacio | %20 | + | %2B |
! | %21 | , | %2C |
" | %22 | / | %2F |
# | %23 | : | %3A |
$ | %24 | ; | %3B |
% | %25 | = | %3D |
& | %26 | ? | %3F |
' | %27 | @ | %40 |
( | %28 | [ | %5B |
) | %29 | ] | %5D |
* | %2A | salto de línea | %0A |
Codificar URL en JavaScript, Python y PHP
Todos los lenguajes tienen funciones para esto, y se diferencian sobre todo en cómo tratan los espacios, las barras y ! ' ( ) * ~.
JavaScript tiene encodeURIComponent para un valor, encodeURI para una dirección completa y URLSearchParams para la codificación de formulario:
encodeURIComponent("café & crème") // "caf%C3%A9%20%26%20cr%C3%A8me"
encodeURI("https://example.com/a b?q=café") // "https://example.com/a%20b?q=caf%C3%A9"
new URLSearchParams({ q: "café & crème" }).toString() // "q=caf%C3%A9+%26+cr%C3%A8me"
decodeURIComponent("caf%C3%A9") // "café"
decodeURIComponent no convierte + en un espacio y lanza un URIError ante una secuencia no válida como 100%.
En Python las funciones están en urllib.parse. quote conserva / por defecto (safe='/') y por lo demás codifica todo salvo los caracteres no reservados de RFC 3986. quote_plus escribe los espacios como + y codifica también /:
from urllib.parse import quote, quote_plus, urlencode, unquote_plus
quote("café & crème/brûlée") # 'caf%C3%A9%20%26%20cr%C3%A8me/br%C3%BBl%C3%A9e'
quote("a b/c", safe="") # 'a%20b%2Fc'
quote_plus("café & crème/brûlée") # 'caf%C3%A9+%26+cr%C3%A8me%2Fbr%C3%BBl%C3%A9e'
urlencode({"q": "café & crème", "page": 2}) # 'q=caf%C3%A9+%26+cr%C3%A8me&page=2'
unquote_plus("caf%C3%A9+au+lait") # 'café au lait'
En PHP, urlencode codifica como un formulario HTML y escribe el espacio como +, mientras que rawurlencode sigue RFC 3986 y escribe %20:
urlencode("café & crème"); // "caf%C3%A9+%26+cr%C3%A8me"
rawurlencode("café & crème"); // "caf%C3%A9%20%26%20cr%C3%A8me"
rawurlencode da el mismo resultado que RFC 3986 estricto. urlencode coincide con Datos de formulario, salvo en *, que codifica como %2A.
Preguntas frecuentes
¿Hay que codificar el espacio como %20 o como +?
%20 funciona en cualquier parte de una URL. Un + significa espacio solo en la cadena de consulta y en los datos de formulario, el formato que envían los formularios HTML. En una ruta, + es un signo más normal, así que /a+b sigue siendo /a+b. Cuando un valor de consulta necesita un signo más real, escríbelo como %2B. En la herramienta, Datos de formulario escribe los espacios como + y los otros tres modos como %20.
¿Qué significan %20, %2F y %3D en una URL?
Son caracteres codificados: %20 es un espacio, %2F una barra y %3D un signo igual. Otros que se ven a menudo son %26 (&), %3F (?), %3A (:), %2C (coma) y %27 (apóstrofo). Los dos dígitos son el código del carácter en hexadecimal. Las letras con tilde y otros caracteres que no son ASCII ocupan de dos a cuatro de estos pares, como %C3%A9 para é. Pega la cadena entera en el decodificador para leerla.
¿Qué diferencia hay entre encodeURI y encodeURIComponent?
encodeURI está pensada para una dirección completa y deja intactos los caracteres que le dan estructura, como : / ? # & =. encodeURIComponent está pensada para una sola parte, el valor de un parámetro o un segmento de ruta, y codifica también esos caracteres, así que https://example.com/?a=1&b=2 pasa a https%3A%2F%2Fexample.com%2F%3Fa%3D1%26b%3D2. En esta herramienta, Valor de parámetro equivale a encodeURIComponent, y URL completa es como encodeURI, pero conserva secuencias existentes como %20 en lugar de convertirlas en %2520.
¿Cómo quito los parámetros UTM de una URL?
Pega el enlace en la pestaña Analizar y editar URL y pulsa Quitar seguimiento (n). Elimina de una vez todas las etiquetas utm_* y los identificadores de clic como fbclid y gclid. Después pulsa Copiar URL. Para quitar solo algunos, usa Quitar parámetro en las filas que no quieras.
¿Codificar una URL es lo mismo que cifrar o que Base64?
No. La codificación de URL no oculta nada: cualquiera puede decodificar caf%C3%A9 y volver a café, así que nunca protege una contraseña ni un token. Solo hace que los caracteres sean seguros para usarlos en una dirección. Base64 es otra codificación que convierte cualquier dato, incluidos los archivos binarios, en una cadena de 64 caracteres. Una cadena Base64 dentro de una URL sigue necesitando que se codifiquen sus +, / y =, salvo que uses la variante segura para URL, que puede generar el codificador y decodificador Base64.
¿Se suben o se guardan las URL que pego?
No. Codificar, decodificar y analizar ocurre en tu navegador, y nada de lo que pegas se envía a un servidor. Importa, porque las URL suelen llevar tokens de acceso, ID de sesión o códigos para restablecer contraseñas. El navegador solo recuerda la pestaña y las opciones que elijas, nunca los textos. Lo único que carga la dirección es Abrir, que la abre en una pestaña nueva igual que haría un clic en el enlace.
Más herramientas para programadores están en la categoría Desarrolladores, y las que convierten un formato en otro están reunidas en Conversores. Para ver qué diferencia hay entre dos URL largas, por ejemplo una llamada a una API que funciona y otra que falla, pégalas en la herramienta para comparar textos y compáralas por caracteres.