Codificar y decodificar URL
Codifica porcentualmente texto para URLs o decodifica secuencias %HH de vuelta a caracteres. Compara modo componente con modo URI completa, y por qué %20 y + no son lo mismo.
Todos los cálculos se ejecutan en el navegador. Nada de lo que introduce se envía a un servidor.
Los resultados se actualizan al escribir. Ctrl/Cmd+Enter copia el resultado principal.
Resultado
—
Vista de bits
Mostrar el procedimiento
Codificar y decodificar URL aplica codificación porcentual RFC 3986 al texto y revierte secuencias %HH de vuelta a caracteres. El modo componente codifica caracteres reservados como /, ? y & para que puedan ir de forma segura dentro de un solo parámetro de consulta. El modo URI completa preserva delimitadores estructurales para que una dirección completa siga siendo un enlace usable. El manejo de espacios ofrece tanto %20 como el signo más de codificación de formularios.
Toda la codificación y decodificación se ejecuta en el navegador. Nada de lo que pegas se envía a un servidor.
Codificar texto para uso seguro en una URL
La codificación porcentual sustituye bytes no seguros o reservados por un signo de porcentaje seguido de dos dígitos hexadecimales. Los dígitos son el valor del byte, normalmente de UTF-8. Introduce una cadena, elige modo componente o URI completa, y copia el resultado codificado en una cadena de consulta, segmento de ruta o destino de redirección.
Los caracteres ya en el conjunto no reservado pasan sin cambio. Todo lo demás se convierte en secuencias %HH en modo componente. La codificación es reversible cuando se usan las mismas reglas al decodificar; mezclar el signo más de codificación de formularios con %20 de estilo ruta es la fuente habitual de idas y vueltas rotas.
Decodificar una cadena codificada porcentualmente
La decodificación encuentra cada % seguido de dos dígitos hex, convierte ese par a un byte y reconstruye el texto original con la codificación de caracteres seleccionada. Un % suelto o un % con dígitos no hex es un error. Los signos más pueden tratarse opcionalmente como espacios cuando la entrada provino de cuerpos application/x-www-form-urlencoded.
Aparece codificación anidada cuando un valor se codificó dos veces. Decodificar una vez puede dejar secuencias %25 que representan un porcentaje literal. Decodifica otra vez solo cuando esa segunda capa fue intencional; decodificar a ciegas dos veces corrompe datos que contenían un % real.
Entender caracteres reservados y no reservados
El RFC 3986 divide ASCII en caracteres no reservados que nunca necesitan codificación en un URI, y caracteres reservados que llevan significado estructural como delimitadores. Las letras, dígitos y -_.~ no reservados permanecen literales. Marcas reservadas como /, ? y & deben codificarse porcentualmente cuando aparecen como datos en lugar de como sintaxis que enmarca la URL.
No reservados: A a Z, a a z, 0 a 9, guion -, guion bajo _, punto ., tilde ~
Reservados (gen-delims): `: / ?
Reservados (sub-delims): ! $ & ' ( ) * + , ; =
Los no reservados permanecen literales. Los reservados deben codificarse cuando aparecen como datos en lugar de como delimitadores. Un signo de interrogación dentro de un valor de parámetro es dato; uno que inicia la cadena de consulta es estructura. La selección de modo es cómo la calculadora sabe qué papel juega cada carácter.
Codificar una URL completa frente a un solo parámetro
La codificación de URI completa, similar a encodeURI de JavaScript, deja intactos los caracteres estructurales para que https:// y las barras de ruta sobrevivan. La codificación de componente, similar a encodeURIComponent, codifica esos caracteres para que un valor pueda ir dentro de un parámetro sin romper la URL circundante. Elegir el modo equivocado destruye un enlace o deja delimitadores que parten la consulta incorrectamente.
| Entrada | Estilo URI completa | Estilo componente |
|---|---|---|
https://example.com/a b | https://example.com/a%20b | https%3A%2F%2Fexample.com%2Fa%20b |
red&blue | red&blue | red%26blue |
a=b | a=b | a%3Db |
Codificar una URL entera con modo componente la destruye como enlace: los dos puntos del esquema y las barras se convierten en %3A y %2F. Codificar un solo parámetro con modo URI completa deja & y = intactos, lo que parte la consulta incorrectamente. Elige el modo que coincida con la ranura que ocupará la cadena.
Codificar una barra y un signo de interrogación
La cadena fixture / and ? en modo componente se convierte en %2F%20and%20%3F. La barra y el signo de interrogación son delimitadores reservados tratados aquí como texto de carga, así que cada uno se escapa. Los espacios se convierten en %20, mientras las letras de and son no reservadas y pasan sin cambio de izquierda a derecha por la cadena.
| Carácter | Motivo | Codificado |
|---|---|---|
/ | delimitador de ruta reservado | %2F |
| espacio | no reservado | %20 |
a, n, d | letras no reservadas | sin cambio |
? | delimitador de consulta reservado | %3F |
Recorre la cadena de izquierda a derecha: codifica /, codifica el espacio, pasa and, codifica el espacio, codifica ?. El resultado %2F%20and%20%3F es seguro para colocar en un parámetro de consulta llamado, por ejemplo, q. Usar modo URI completa en la misma cadena dejaría / y ? literales, lo cual es correcto solo cuando esos caracteres están pensados como estructura y no como texto de carga.
Entender %20 frente al signo más
Un espacio se codifica como %20 en rutas URI y en cadenas de consulta modernas que siguen RFC 3986. Los formularios HTML que envían como application/x-www-form-urlencoded codifican históricamente espacios como + en su lugar. Ambas convenciones aparecen en tráfico de producción, y tratarlas como idénticas es el fallo de codificación de espacios más común al decodificar entradas mixtas.
| Contexto | Codificación de espacio |
|---|---|
| Segmento de ruta | %20 |
| Consulta RFC 3986 | %20 |
| Cuerpo de formulario / consulta heredada | + |
Un signo más literal en datos debe codificarse como %2B, o un decodificador de formularios lo tratará como espacio. La calculadora indica qué convención de espacio está activa para que un + decodificado no se confunda con un carácter más cuando el modo formulario está activo, y un %20 no se rechace cuando el modo ruta está activo.
Descomponer una URL en sus partes
Una URL típica tiene esquema, host, puerto opcional, ruta, cadena de consulta y fragmento, y las reglas de codificación difieren por parte. Delimitadores estructurales como ://, /, ?, &, = y # permanecen literales cuando enmarcan la dirección.
Los nombres de parámetro, valores de parámetro y segmentos de ruta que llevan datos se codifican individualmente en modo componente antes de que esos delimitadores los unan.
https://example.com:443/search?q=a%20b&lang=en#top
└─┬─┘ └─────┬─────┘ └─┬──┘ └───────┬───────┘ └┬┘
scheme host path query fragment
| Parte | Función |
|---|---|
| Esquema | Protocolo, como https |
| Host | Dominio o IP, con puerto opcional |
| Ruta | Ubicación del recurso, separada por barras |
| Consulta | Lista de parámetros tras ?, unidos por & |
| Fragmento | Ubicación del lado cliente tras #, no enviada al servidor en el URI de petición del mismo modo |
Codifica nombres y valores de parámetro individualmente en modo componente, luego únelos con & y = literales. Codifica segmentos de ruta individualmente si contienen espacios o caracteres reservados, manteniendo literales las barras que separan segmentos.
Leer la tabla de codificación de caracteres
La tabla siguiente lista caracteres reservados y no seguros habituales con sus formas porcentuales bajo codificación de bytes UTF-8. Un espacio se convierte en %20, un ampersand en %26, y un numeral en %23. Los caracteres no ASCII se expanden a varias unidades %HH porque cada byte UTF-8 se codifica por separado en lugar de como un glifo abstracto.
| Char | Porcentual | Notas |
|---|---|---|
| espacio | %20 | O + en codificación de formularios |
! | %21 | |
# | %23 | Delimitador de fragmento |
$ | %24 | |
& | %26 | Delimitador de par de consulta |
' | %27 | |
( | %28 | |
) | %29 | |
+ | %2B | Signo más literal |
, | %2C | |
/ | %2F | Delimitador de ruta |
: | %3A | Separador esquema / host |
; | %3B | |
= | %3D | Asignación de parámetro |
? | %3F | Inicio de consulta |
@ | %40 | Separador userinfo |
[ | %5B | |
] | %5D |
El texto no ASCII se expresa primero como bytes UTF-8, luego cada byte se codifica porcentualmente. Un solo carácter visible puede expandirse por tanto a dos o tres unidades %HH. Los análisis profundos de codificación de caracteres para Shift JIS y conjuntos heredados similares viven con la herramienta Base64; esta página enlaza en lugar de repetir ese catálogo.
Preguntas frecuentes
¿Qué es la codificación porcentual?
La codificación porcentual sustituye un byte por un % seguido de dos dígitos hexadecimales del valor de ese byte. Permite que caracteres reservados y no ASCII viajen dentro de URLs sin leerse como sintaxis. La decodificación revierte la sustitución.
¿Cuándo debe usarse codificación de componente?
Usa codificación de componente para un solo nombre o valor de parámetro, un segmento de ruta que es puro dato, o cualquier cadena que se insertará junto a delimitadores estructurales. Codifica /, ?, & y = para que no puedan partir la URL.
¿Cuándo debe usarse codificación de URI completa?
Usa codificación de URI completa cuando la entrada ya es una URL completa y solo deben cambiar caracteres ilegales como espacios. Los dos puntos y barras estructurales permanecen literales para que el resultado siga siendo una dirección clicable.
¿Por qué / and ? se convierte en %2F%20and%20%3F?
En modo componente la barra y el signo de interrogación se tratan como datos, así se codifican a %2F y %3F. Los espacios se convierten en %20. Las letras de and son no reservadas y permanecen como están.
¿Es + lo mismo que %20?
No. %20 es la codificación RFC 3986 de un espacio. + significa espacio solo en datos application/x-www-form-urlencoded. Un signo más literal debe ser %2B o los decodificadores de formularios lo convertirán en espacio.
¿Qué caracteres nunca necesitan codificación?
El conjunto no reservado: letras, dígitos, guion, guion bajo, punto y tilde. Esos caracteres permanecen literales en ambos modos. Codificarlos sigue funcionando pero añade longitud innecesaria.
¿Cómo se codifican caracteres no ASCII?
Primero se convierten a bytes UTF-8, luego cada byte se codifica porcentualmente. Un carácter visible puede convertirse en varias secuencias %HH. La decodificación debe usar UTF-8 para reconstruir el texto original.
¿Decodificar dos veces arregla una URL rota?
Solo si el valor se codificó deliberadamente dos veces. De lo contrario la segunda pasada corrompe secuencias % literales que formaban parte de los datos. Decodifica una vez, inspecciona, y decodifica otra vez solo cuando patrones %25 muestren una segunda capa.
¿Es esto lo mismo que Base64?
No. La codificación porcentual escapa caracteres para URIs. Base64 mapea bytes arbitrarios a un alfabeto de 64 caracteres para transporte en protocolos de texto. Usa cada uno para su trabajo.
¿Se suben URLs pegadas?
No. Codificación y decodificación se ejecutan solo en el navegador. Cadenas de consulta que contienen tokens o fragmentos de sesión no se transmiten a un servidor con esta herramienta.
Resumen
Codificar y decodificar URL codifica y decodifica porcentualmente texto bajo reglas RFC 3986, con modos separados para URIs completas y componentes individuales. El fixture / and ? se convierte en %2F%20and%20%3F en modo componente. Los espacios usan %20 en contextos URI y pueden usar + en codificación de formularios, que es una convención distinta.
Los caracteres reservados conservan su significado solo cuando permanecen literales como estructura; codifícalos cuando son carga. Todo el trabajo permanece en el dispositivo.