Cómo funciona la codificación de URL y el percent-encoding
Qué hace esta herramienta
Una URL solo puede transportar de forma segura un conjunto limitado de caracteres. Todo lo que quede fuera de las letras, dígitos y unos pocos símbolos sin reservar debe reescribirse como percent-encoding: un signo % seguido del valor del byte en hexadecimal. Esta herramienta convierte texto normal a esa forma codificada y también realiza el proceso inverso, devolviendo secuencias como %20 y %26 a los caracteres que representan.
Dos tipos de codificación cubren las situaciones reales. La codificación estándar usa encodeURIComponent de JavaScript: escapa todos los caracteres salvo letras, dígitos y - _ . ! ~ * ' ( ), incluidos los estructurales como :, /, ?, # y &, que es lo que necesitas para una parte aislada como el valor de un parámetro. La codificación de formulario sigue la regla application/x-www-form-urlencoded que usa el navegador al enviar un formulario y escribe un espacio como + en lugar de %20.
Cuándo usarla
Recurre a la codificación estándar siempre que un valor vaya dentro de una cadena de consulta: un término de búsqueda, una dirección de correo o un destino de redirección que a su vez contenga ?, & o =. Codificarlo evita que esos símbolos se interpreten como estructura de la URL y rompan el enlace. Como se escapan todos los caracteres estructurales, codifica las partes de una dirección una por una: si codificas una URL terminada, también se escaparán sus barras y el signo de interrogación, algo correcto solo cuando esa URL es a su vez un valor dentro de otra. La codificación de formulario coincide con el cuerpo de una petición POST o con una carga de formulario construida a mano, donde los espacios se escriben como + en lugar de %20. Decodificar es igual de habitual: pegar un enlace codificado de un registro, un informe de analítica o una cadena de redirecciones y leer a dónde apunta en realidad.
Un ejemplo concreto
Toma el texto hello world & café. Con la codificación estándar, un espacio pasa a %20, el ampersand se convierte en %26 y café —como é se almacena en dos bytes UTF-8— queda como caf%C3%A9. Con la codificación de formulario, ese mismo espacio se escribe como +, dando hello+world. Una línea de resumen cuenta cuántos caracteres cambiaron y qué parte del texto representan.
Notas y casos límite
Los caracteres reservados (: / ? # [ ] @ ! $ & ' ( ) * + , ; =) tienen significado dentro de una URL. Ambos tipos escapan : / ? # [ ] @ $ & + , ; = y dejan ! ' ( ) * tal cual, así que codifica un valor antes de ponerlo en una cadena de consulta, no la URL terminada. La codificación se define sobre bytes UTF-8, de modo que cualquier carácter no ASCII se expande en varios grupos %XX. Evita codificar una URL dos veces: un % suelto que ya forma parte de un escape se convierte en %25 y el enlace deja de resolverse. Ante la duda, decodifica primero para comprobar si el texto está en crudo o ya escapado.