Codifica y decodifica URLs y cadenas de consulta con codificación porcentual. Elige modo componente, URI completa o datos de formulario, con conversión bidireccional instantánea.
Codifica texto para URLs con codificación porcentual, o vuelve al original. Escribe en cualquiera de los dos campos y el otro se actualiza al instante. Elige el modo según dónde vaya a usarse el valor: un parámetro de consulta, una URL completa o el envío de un formulario HTML.
La codificación porcentual, bien explicada
Por qué las URLs necesitan codificación
Una URL no es texto libre. Caracteres como ?, #, &, / y = son reservados: tienen significado estructural y marcan dónde termina la ruta y empieza la consulta, o separan un parámetro del siguiente. Si el valor que quieres transmitir contiene uno de esos caracteres, el analizador del otro extremo leerá mal tu URL. La codificación porcentual lo resuelve sustituyendo el byte problemático por un % seguido de su valor hexadecimal de dos dígitos, de modo que un & dentro de un valor viaja como %26 y nunca puede confundirse con un separador.
No reservados, reservados y el resto
RFC 3986 divide el espacio de caracteres en tres grupos.
No reservados — A-Z a-z 0-9 - . _ ~. Nunca necesitan codificación y conviene dejarlos tal cual. Codificarlos es legal, pero produce URLs más feas y puede romper comparaciones de cadenas ingenuas.
Reservados — : / ? # [ ] @ ! $ & ' ( ) * + , ; =. Solo son seguros donde deben ser estructurales. Dentro de un valor hay que codificarlos.
Todo lo demás — espacios, caracteres de control y cualquier texto no ASCII. Siempre requieren codificación.
Texto no ASCII y UTF-8
La codificación porcentual opera sobre bytes, no sobre caracteres, así que primero hay que convertir el texto a bytes. La respuesta moderna es siempre UTF-8. El signo € ocupa tres bytes en UTF-8 (E2 82 AC), por lo que se codifica como %E2%82%AC. Los sistemas antiguos usaban a veces el propio juego de caracteres de la página, y por eso todavía aparece alguna URL ilegible codificada en Latin-1 o GBK. Esta herramienta usa UTF-8 en todo momento, igual que los navegadores y todos los frameworks actuales.
Los tres modos y cuándo cada uno es un error
encodeURIComponent es la opción segura por defecto y escapa todos los caracteres reservados. Úsalo siempre que insertes un valor dentro de una URL. encodeURI conserva deliberadamente los caracteres reservados para que una URL completa siga intacta: úsalo solo para ordenar una URL ya montada, nunca sobre un parámetro suelto, porque dejará tal cual un & de tu valor y corromperá la cadena de consulta.
El modo formulario es el caso raro. La serialización application/x-www-form-urlencoded, anterior a las especificaciones modernas de URL, codifica un espacio como + y no como %20. Ambas son correctas en una cadena de consulta y los servidores aceptan las dos, pero si construyes a mano el cuerpo de un POST deberías seguir la convención de formulario.
La ambigüedad del +
Como la codificación de formulario da un significado especial al +, un signo más literal dentro de un valor de formulario debe codificarse como %2B. Este es el fallo de codificación más habitual: una cadena base64 o un teléfono en formato internacional se pasan tal cual y el receptor convierte cada + en un espacio. Si tus datos pueden contener signos más, codifícalos explícitamente o evita el modo formulario.
Doble codificación
Codificar una cadena ya codificada convierte cada % en %25, así que %20 pasa a ser %2520. Casi siempre es un error: ocurre cuando el código de la aplicación codifica un valor y luego un framework o un proxy lo vuelven a codificar. Si ves %25 en una URL donde no pretendías un signo de porcentaje literal, estás ante un valor doblemente codificado. Decodificar dos veces recupera el original, pero la solución real es eliminar uno de los pasos.
Preguntas frecuentes
¿Debo usar %20 o + para un espacio?
Ambos se aceptan en una cadena de consulta. Usa %20 si quieres una representación válida en todas partes, incluido un segmento de ruta donde + significa un signo más literal. Usa + solo cuando generes datos application/x-www-form-urlencoded.
¿Por qué mi signo más se convierte en espacio?
Algo en la cadena está interpretando el valor como datos de formulario, donde + codifica un espacio. Codifica los signos más literales como %2B antes de enviarlos.
¿Hay que codificar la barra?
Solo cuando la barra forma parte de un valor y no es un separador de ruta. Un nombre de archivo con barra debe enviarse como %2F; si no, el servidor lo leerá como un nivel de directorio extra. Ten en cuenta que algunos servidores rechazan %2F en las rutas por precaución.
¿La codificación distingue mayúsculas?
Los dígitos hexadecimales pueden ir en mayúscula o minúscula y decodifican igual, pero RFC 3986 recomienda mayúsculas. %2F y %2f son el mismo carácter; %2F es la forma canónica.
¿Por qué falla la decodificación de mi cadena?
Un signo de porcentaje debe ir seguido de exactamente dos dígitos hexadecimales. Un % suelto o algo como %zz está mal formado y el decodificador lanza un error. Si tu texto contiene legítimamente un porcentaje, debería haberse codificado como %25.
¿Se envían mis datos a algún sitio?
No. La codificación y la decodificación se ejecutan en tu navegador con las funciones URI integradas. No se sube nada.