Codificación porcentual · Gratis

Codificador y decodificador de URL

No existe una única codificación porcentual correcta, y elegir la equivocada es lo que rompe una cadena de consulta sin que nadie lo note. Mira las cuatro a la vez, decodifica con seguridad viendo qué falla y dónde, y divide cualquier enlace en esquema, host, ruta, consulta y fragmento.

Codificado y analizado en tu navegador · No se accede a ningún enlace
Informar de un problema

34 caracteres se codifican en 70 caracteres con la codificación de componente, a partir de 38 bytes UTF-8.

Texto que codificar

Pega el valor, no el enlace entero

Codificar un valor no es la misma tarea que codificar una URL, y por eso abajo aparecen cuatro respuestas en lugar de una.

34 de 100,000 caracteres

No se sube nada y no se accede a nada.

Cuatro respuestas correctas

El mismo texto, codificado de cuatro formas defendibles

Codificación de componente · encodeURIComponent()
Caf%C3%A9%20cr%C3%A8me%20%26%20croissants%20%2F%20%C3%A9t%C3%A9%202026

Úsala para una sola parte de una URL: un valor de consulta, un segmento de ruta, un fragmento. Escapa los delimitadores / ? : @ & = + $ y #, así que un valor que contenga cualquiera de ellos no puede salirse de su sitio.

Codificación de URL completa · encodeURI()
Caf%C3%A9%20cr%C3%A8me%20&%20croissants%20/%20%C3%A9t%C3%A9%202026

Úsala con una URL que ya está montada. Deja intactos los delimitadores reservados para que la estructura sobreviva, y por eso mismo no protege un valor que contenga un ampersand.

Aquí difiere de la codificación de componente
Codificación de formulario · application/x-www-form-urlencoded
Caf%C3%A9+cr%C3%A8me+%26+croissants+%2F+%C3%A9t%C3%A9+2026

Lo que producen un formulario HTML y URLSearchParams. Un espacio se convierte en un signo más en lugar de %20, y esa única diferencia es lo que corrompe datos sin avisar cuando las dos convenciones se cruzan.

Aquí difiere de la codificación de componente
RFC 3986 estricta · solo caracteres no reservados
Caf%C3%A9%20cr%C3%A8me%20%26%20croissants%20%2F%20%C3%A9t%C3%A9%202026

Solo sobreviven las letras, los dígitos y los cuatro signos - . _ ~. Úsala para firmas OAuth 1.0, AWS Signature Version 4 y en cualquier caso en que una firma tenga que coincidir byte a byte.

Aquí es idéntica a la codificación de componente
34 caracteres de entrada38 bytes UTF-870 caracteres de salida16 secuencias de escape
Vista de bytes

Por qué la cadena codificada se ha alargado tanto

Una secuencia de escape porcentual lleva un byte, no un carácter. Todo lo que queda fuera de ASCII se convierte en dos, tres o cuatro secuencias de escape, así que una palabra con acentos puede triplicar su longitud y un emoji se convierte en doce caracteres.

Caracteres
34
Unidades UTF-16
34
Bytes UTF-8
38
Fuera de ASCII
4
Carácter, punto de código, bytes UTF-8 y forma con codificación porcentual
CarácterPunto de códigoBytes UTF-8Codificado
CU+004343C
aU+006161a
fU+006666f
éU+00E9C3 A9%C3%A9
SPU+002020%20
cU+006363c
rU+007272r
èU+00E8C3 A8%C3%A8
mU+006D6Dm
eU+006565e
SPU+002020%20
&U+002626%26
SPU+002020%20
cU+006363c
rU+007272r
oU+006F6Fo
iU+006969i
sU+007373s
sU+007373s
aU+006161a
nU+006E6En
tU+007474t
sU+007373s
SPU+002020%20
/U+002F2F%2F
SPU+002020%20
éU+00E9C3 A9%C3%A9
tU+007474t
éU+00E9C3 A9%C3%A9
SPU+002020%20
2U+0032322
0U+0030300
2U+0032322
6U+0036366
Referencia

Qué codificador escapa qué carácter

RFC 3986 divide ASCII en caracteres no reservados, que nunca necesitan escaparse, y caracteres reservados, que aportan estructura y por tanto deben escaparse cuando aparecen dentro de un valor. Las letras, los dígitos y los cuatro signos guion, punto, guion bajo y virgulilla son no reservados y ningún codificador de esta página los toca, así que no se incluyen.

Cada signo de puntuación ASCII con su grupo en RFC 3986 y cómo lo escribe cada uno de los cuatro codificadores
CarácterByteFunciónComponenteURL completaFormularioRFC 3986
SP20Siempre escapadoEspacio%20%20+%20
!21SubdelimitadorSigno de exclamación!!%21%21
"22Siempre escapadoComillas dobles%22%22%22%22
#23Delimitador generalAlmohadilla, inicia el fragmento%23#%23%23
$24SubdelimitadorSigno de dólar%24$%24%24
%25Siempre escapadoSigno de porcentaje, inicia una secuencia de escape%25%25%25%25
&26SubdelimitadorAmpersand, separa los parámetros%26&%26%26
'27SubdelimitadorApóstrofo''%27%27
(28SubdelimitadorParéntesis de apertura((%28%28
)29SubdelimitadorParéntesis de cierre))%29%29
*2ASubdelimitadorAsterisco***%2A
+2BSubdelimitadorSigno más%2B+%2B%2B
,2CSubdelimitadorComa%2C,%2C%2C
-2DNo reservadoGuion----
.2ENo reservadoPunto....
/2FDelimitador generalBarra, separa los segmentos de ruta%2F/%2F%2F
:3ADelimitador generalDos puntos, siguen al esquema%3A:%3A%3A
;3BSubdelimitadorPunto y coma%3B;%3B%3B
<3CSiempre escapadoMenor que%3C%3C%3C%3C
=3DSubdelimitadorIgual, separa la clave del valor%3D=%3D%3D
>3ESiempre escapadoMayor que%3E%3E%3E%3E
?3FDelimitador generalSigno de interrogación, inicia la consulta%3F?%3F%3F
@40Delimitador generalArroba, cierra las credenciales%40@%40%40
[5BDelimitador generalCorchete de apertura, delimita un host IPv6%5B%5B%5B%5B
\5CSiempre escapadoBarra invertida%5C%5C%5C%5C
]5DDelimitador generalCorchete de cierre, delimita un host IPv6%5D%5D%5D%5D
^5ESiempre escapadoAcento circunflejo%5E%5E%5E%5E
_5FNo reservadoGuion bajo____
`60Siempre escapadoAcento grave%60%60%60%60
{7BSiempre escapadoLlave de apertura%7B%7B%7B%7B
|7CSiempre escapadoBarra vertical%7C%7C%7C%7C
}7DSiempre escapadoLlave de cierre%7D%7D%7D%7D
~7ENo reservadoVirgulilla~~%7E~
Una celda en gris significa que el carácter ha sobrevivido intacto. Cada fila se genera ejecutando los mismos cuatro codificadores que usa esta página, así que la tabla no puede desfasarse respecto a la salida que tiene encima.
Cómo funciona

Un carácter, varias respuestas correctas.

La codificación porcentual sustituye un carácter por un signo de porcentaje seguido del valor hexadecimal de cada uno de sus bytes UTF-8. Lo difícil nunca fue el mecanismo, sino decidir qué caracteres sustituir, y esa pregunta no tiene una única respuesta. Una barra entre dos segmentos de ruta es estructura y debe quedarse tal cual; la misma barra dentro de un nombre de archivo es un dato y tiene que convertirse en %2F. Un espacio es %20 según RFC 3986 y un signo más en la codificación de formulario que realmente envía un navegador. Un signo de exclamación sobrevive a encodeURIComponent y un codificador RFC 3986 estricto lo escapa, que es justo la razón por la que una firma OAuth calculada con el codificador equivocado no se verifica. Esta página se niega a elegir por ti: aplica los cuatro conjuntos de reglas a la misma entrada, etiqueta cada uno con la situación a la que corresponde y te deja copiar el que encaje.

  1. 01

    Indica qué tarea estás haciendo

    Codificar un valor no es la misma tarea que codificar una URL completa, y ninguna de las dos es lo mismo que desmontar un enlace. Elige codificar, decodificar, analizar una URL o el editor de consultas, y el espacio de trabajo cambia en consecuencia. Cada tarea conserva su propio texto, así que cambiar de una a otra no te hace perder nada.

  2. 02

    Lee todas las respuestas, no solo una

    El modo de codificación muestra el mismo texto con las cuatro reglas a la vez, cada una etiquetada con el caso en que es la correcta y cada una copiable por separado. El modo de decodificación muestra la lectura de componente, la lectura de formulario en la que un signo más es un espacio y una decodificación repetida que indica cuántas capas ha deshecho. El modo de análisis divide el enlace en esquema, credenciales, host en su forma legible y en su forma punycode, puerto, segmentos de ruta, parámetros de consulta y fragmento.

  3. 03

    Copia la parte que necesitas o reconstruye el enlace

    Cada salida tiene su propio botón de copiar, así que no hay que buscar dentro de un muro de texto. En el modo de análisis y en el editor de consultas puedes editar un valor, añadir un parámetro, quitar uno o cambiar el orden, y el enlace se reconstruye a partir de la tabla con todo codificado de nuevo correctamente.

Para redirecciones rotas, parámetros destrozados y enlaces sospechosos

Todas las codificaciones, un decodificador honesto y el enlace entero desmontado.

Cuatro codificaciones a la vez, cada una con su función

Codificación de componente para un solo valor, codificación de URL completa para un enlace ya montado, codificación de formulario para todo lo que envía un navegador y RFC 3986 estricta para firmas. No se ponen de acuerdo sobre el espacio, el signo más, la barra, el signo de exclamación, el apóstrofo, la virgulilla y el asterisco, y cada uno de esos desacuerdos ha roto la cadena de consulta de alguien. Ver las cuatro juntas es más rápido que recordar qué función hace qué.

Un decodificador que nombra el fallo y lo señala

La función integrada del navegador lanza un URIError escueto que no te dice nada. Este recorre la cadena por su cuenta e indica la posición del carácter, la secuencia problemática y el motivo: un signo de porcentaje sin dígitos hexadecimales detrás, un par que no es hexadecimal, un byte que solo puede aparecer en mitad de un carácter, una codificación sobrelarga, una mitad de par sustituto o un punto de código más allá del final de Unicode. Un acento circunflejo (^) marca el punto exacto.

Doble codificación detectada y contada

%2520 es un espacio que pasó dos veces por un codificador, y es el motivo más habitual por el que deja de funcionar un parámetro de redirección. La decodificación repetida continúa hasta que el texto deja de cambiar, indica cuántas capas se han quitado y muestra cada cadena intermedia para que veas dónde se añadió la pasada de más.

Las dos formas de un host internacionalizado

Un dominio escrito en cirílico, en griego o en alemán con diéresis se resuelve como punycode, y las dos formas se muestran una junto a otra. Es la comprobación que delata un enlace homográfico: el host legible parece conocido, mientras que la forma ASCII que realmente recibe el DNS no lo es. El punycode se decodifica aquí, en la página, porque el navegador no ofrece por sí solo ninguna forma de volver atrás desde la forma ASCII.

Un editor de consultas que respeta las claves repetidas

tag=a&tag=b son dos valores, no uno, y un analizador que en silencio se queda solo con el último pierde datos. Los parámetros aparecen como filas separadas en su orden original, y puedes editarlos, añadirlos, quitarlos y reordenarlos, y después copiar la cadena reconstruida con el espacio escrito como signo más o como %20, según lo que espere el sistema que la recibe.

Una vista de bytes y una tabla de referencia que no pueden desfasarse

Una letra acentuada se convierte en dos tripletes porcentuales, un carácter CJK en tres y un emoji en cuatro, y por eso una cadena codificada puede ser varias veces más larga que lo que escribiste. La vista de bytes lo muestra carácter a carácter, y la tabla de referencia enumera todos los signos de puntuación ASCII con su función en RFC 3986 y cómo los escribe cada uno de los cuatro codificadores. Ambas se generan con el mismo código que produce la salida que tienen encima.

Preguntas sobre codificación

Signos más, %2520, punycode y por qué el decodificador integrado lanza un error.

¿Qué diferencia hay entre encodeURI y encodeURIComponent?+

encodeURIComponent codifica una parte de una URL y da por hecho que esa parte es un dato, así que escapa los delimitadores que dan forma a una URL: la barra, el signo de interrogación, la almohadilla, el ampersand, el signo igual, los dos puntos, la arroba, el signo más y el signo de dólar. encodeURI codifica una URL que ya está montada y da por hecho que esos delimitadores son estructura, así que los deja como están. La regla práctica es que casi siempre quieres la versión de componente, porque casi siempre estás construyendo una URL a partir de piezas y no arreglando una que ya existe. Recurre a la versión de URL completa solo cuando alguien te pase un enlace completo con un espacio o un carácter acentuado que haya que limpiar.

¿Por qué un espacio es a veces %20 y a veces un signo más?+

Porque se escribieron dos estándares en épocas distintas y los dos han sobrevivido. RFC 3986, que describe las URL en general, codifica un espacio como %20 en todas partes. El formato de envío de formularios HTML, más antiguo, application/x-www-form-urlencoded, codifica un espacio como un signo más, y eso es lo que siguen enviando los navegadores cuando se envía un formulario y lo que produce URLSearchParams. Prácticamente todos los servidores leen bien ambos dentro de una cadena de consulta, porque los analizadores de cadenas de consulta conocen las dos convenciones. El problema empieza cuando un valor codificado de una manera se decodifica de la otra: si decodificas un valor codificado como formulario con un decodificador porcentual simple, un nombre como Anna Marie sale como Anna+Marie. Por eso esta página muestra las dos lecturas de una decodificación en lugar de elegir una por ti.

¿Qué significa %2520?+

Significa un espacio que se codificó dos veces. Un espacio primero se convierte en %20. Si ese %20 vuelve a pasar por un codificador, el propio signo de porcentaje se codifica como %25 y acabas con %2520. Ver %25 seguido de otros dos dígitos hexadecimales en cualquier parte de un enlace es la huella de una doble codificación. Suele ocurrir cuando un parámetro de redirección se construye codificando una URL que ya estaba codificada, o cuando un valor pasa por dos frameworks que lo codifican cada uno con la mejor intención. Pégalo aquí en el modo de decodificación y el recuento de capas te dirá exactamente cuántas pasadas hay que deshacer.

¿Qué caracteres hay que codificar realmente?+

RFC 3986 define un conjunto no reservado que nunca necesita escaparse: de la A a la Z, de la a a la z, del 0 al 9 y los cuatro signos guion, punto, guion bajo y virgulilla. Todo lo demás cae en el conjunto reservado, que se divide en delimitadores generales (dos puntos, barra, signo de interrogación, almohadilla, corchetes, arroba) y subdelimitadores (signo de exclamación, dólar, ampersand, apóstrofo, paréntesis, asterisco, más, coma, punto y coma, igual). Un carácter reservado es válido donde cumple su función estructural y debe escaparse donde es un dato. Además, el espacio y los caracteres comillas dobles, menor que, mayor que, porcentaje, barra invertida, acento circunflejo, acento grave y las llaves no pueden aparecer sin codificar en ningún caso. La tabla de referencia de esta página enumera cada uno con el tratamiento que le dan los cuatro codificadores.

¿Por qué una letra acentuada se convierte en dos códigos de porcentaje?+

Porque la codificación porcentual trabaja con bytes, no con caracteres, y las URL modernas transportan el texto como UTF-8. En UTF-8, la letra e con acento agudo ocupa dos bytes, C3 y A9, así que se codifica como %C3%A9. Un carácter CJK ocupa tres bytes y se convierte en tres tripletes, y un emoji ocupa cuatro bytes y se convierte en cuatro tripletes, es decir, doce caracteres para un solo símbolo visible. Por eso una cadena codificada puede ser varias veces más larga que el texto que escribiste, y por eso un límite de longitud medido en caracteres se comporta de forma distinta antes y después de codificar. La vista de bytes de esta página muestra esa expansión carácter a carácter.

¿Puedo codificar la URL entera para ir sobre seguro?+

No, y es el error que más enlaces rotos produce. Pasar una URL que ya es correcta por un codificador convierte cada carácter estructural en una secuencia de escape: las barras se convierten en %2F, el signo de interrogación en %3F, y el signo de porcentaje de cualquier secuencia de escape existente pasa a ser %25. Lo que sale ya no es una URL, sino una cadena que casualmente se parece a una. Si el enlace ya funciona, déjalo como está. Si un enlace tiene un espacio sin codificar o un carácter acentuado, la codificación de URL completa es la herramienta adecuada, porque los corrige sin tocar los delimitadores. Prueba el ejemplo Ya codificado en el modo de codificación para ver exactamente qué le hace la recodificación a un enlace sano.

¿Qué es punycode y por qué el host se ve distinto de lo que escribí?+

El sistema de nombres de dominio solo transporta un conjunto restringido de caracteres ASCII, así que un dominio escrito en árabe, cirílico, griego, chino o simplemente con una diéresis alemana tiene que traducirse a ASCII antes de poder consultarse. Esa traducción es punycode, y produce etiquetas que empiezan por xn--. El navegador hace esta conversión en silencio, lo que significa que el host que lees y el host que realmente se resuelve son dos cadenas distintas. Mostrar los dos es una comprobación de seguridad, no una curiosidad: un ataque homográfico funciona precisamente porque un nombre formado por caracteres de aspecto parecido se lee como una marca conocida mientras se resuelve en algo completamente distinto. Esta página decodifica el punycode de vuelta a Unicode en el navegador, ya que no hay ninguna forma integrada de invertirlo.

¿Es seguro poner un nombre de usuario y una contraseña en una URL?+

Considera que cualquier credencial que haya aparecido en una URL ya se ha filtrado. La parte de información de usuario de una URL, todo lo que va antes de la arroba, se envía en claro como parte de la línea de petición en protocolos antiguos, se escribe en los registros de acceso del servidor y en los registros de los proxies, se guarda en el historial del navegador y, históricamente, se ha filtrado a través de la cabecera Referer enviada al siguiente sitio que visitas. Algunos navegadores ahora la eliminan o avisan de ella, pero las copias ya escritas en los registros no desaparecen. Si un enlace con credenciales se ha compartido, se ha pegado en un ticket o se ha abierto desde un correo, cambia la contraseña en lugar de confiar en que el enlace siga siendo privado. Esta página marca las credenciales siempre que las encuentra y oculta la contraseña en lugar de mostrarla.

¿Por qué decodeURIComponent lanza un error y qué debo hacer en su lugar?+

Lanza un URIError siempre que la entrada no es una cadena UTF-8 válida con codificación porcentual, lo que incluye un signo de porcentaje sin nada detrás, un par que no es hexadecimal como %ZZ, un carácter multibyte truncado como un %C3 suelto, una codificación sobrelarga y una mitad de par sustituto escapada. El error no indica ni la posición ni la causa, así que en producción suele acabar en una página en blanco o en un error 500. La solución en tu propio código es envolver la llamada y gestionar el fallo de forma explícita en lugar de dejar que se propague. La solución mientras depuras es pegar el valor aquí: el decodificador de esta página recorre la cadena a mano y te dice qué carácter falla y por qué, en lugar de negarse a decirlo.

¿Se envía a un servidor algo de lo que pego?+

No. Todos los codificadores, el decodificador, el analizador de URL, el decodificador de punycode y el editor de consultas se ejecutan en esta pestaña como JavaScript normal, y nunca se accede a ningún enlace. Aquí eso importa más que en la mayoría de las herramientas, porque las URL que la gente lleva a un decodificador son justo las que contienen tokens de sesión, enlaces de descarga firmados, parámetros de restablecimiento de contraseña y nombres de host internos. La entrada está limitada a 100,000 caracteres, mucho más de lo que ocupa cualquier URL utilizable, y no se guarda nada entre visitas.

Más herramientas especializadas, listas cuando las necesites.

Explora una colección cada vez más amplia para cálculos, documentos, escritura y el trabajo diario.

Ver todas las herramientas