Qué hace esta herramienta
El texto pasa a bytes UTF-8, y cada byte fuera del conjunto no reservado se escribe con un signo de porcentaje seguido de dos dígitos hexadecimales. Salen intactos las letras, los dígitos y - . _ ~.
Todo lo demás se escapa, incluidos los caracteres que estructuran una URL:
a b → a%20b
a+b&c=d → a%2Bb%26c%3Dd
café → caf%C3%A9
😀 → %F0%9F%98%80
Codificación por porcentaje, no de formulario
Esta es la distinción que conviene llevarse, porque corrompe datos en silencio en los dos sentidos.
La codificación por porcentaje es la de una ruta de URL y de una cadena de consulta moderna. Allí el espacio se escribe %20. Un signo más es un más literal, y se escapa a %2B cuando aparece dentro de un valor.
La codificación de formulario —application/x-www-form-urlencoded, lo que envía un formulario HTML— escribe el espacio como +. Es la convención más antigua, y sigue por todas partes.
Esta herramienta aplica la primera regla, igual que encodeURIComponent y decodeURIComponent en un navegador.
La consecuencia al decodificar
Una cadena que venga de un formulario, o de una cadena de consulta escrita en ese estilo, conservará aquí sus signos más en vez de devolverlos a espacios. a+b se decodifica como a+b.
Es correcto para la codificación por porcentaje y equivocado respecto a lo que probablemente querías. Si la entrada viene de un formulario, sustituye + por %20 antes de decodificar, o usa un decodificador de formulario.
Un signo de porcentaje suelto, sin dos dígitos hexadecimales detrás, da error en vez de una suposición: 100% no se puede decodificar, y fingir lo contrario inventaría un byte.
Codifica un valor, no una URL
Dale una URL entera y escapará también el :// y los separadores, que no es lo que buscas. Codifica cada valor por separado y monta la URL alrededor.
Privado por diseño
Todo se ejecuta localmente en tu navegador con JavaScript. Tus datos nunca se suben a un servidor, lo que hace que la herramienta sea segura para contenido sensible y funcione sin conexión.