Qué hace la codificación de URL
Una URL solo puede contener un conjunto limitado de caracteres ASCII, y algunos de ellos (? & = / # +) le dan su estructura. La codificación porcentual (RFC 3986) escribe cualquier otro byte como un signo de porcentaje seguido de dos dígitos hexadecimales, para que un valor pueda ir dentro de una URL sin cambiar su significado. Los caracteres fuera de ASCII se convierten antes en sus bytes UTF-8: ü pasa a ser %C3%BC.
Ejemplos
a b&cse convierte ena%20b%26ccomo componente de URL y ena+b%26ccomo datos de formulario.Münchense convierte enM%C3%BCnchen.q=base64%20decodese decodifica comoq=base64 decode.
¿Componente de URL o datos de formulario?
Usa componente de URL para un segmento de ruta o un único valor de la query. Escapa los mismos caracteres que encodeURIComponent de JavaScript y, además, ! ' ( ) *. Usa datos de formulario para cuerpos application/x-www-form-urlencoded y para query strings generadas por formularios HTML, en las que + significa espacio. Al decodificar, esa es la única diferencia: en modo formulario un + se convierte en espacio; como componente de URL sigue siendo un signo más.
¿Codificar una URL entera?
Codifica las partes, no la URL entera. Si codificas https://example.com/?q=1 como un solo componente, también se escapan :, / y ?. Eso es correcto para una URL que se pasa como parámetro de otra URL, por ejemplo como destino de una redirección, pero no para un enlace que deba seguir abriéndose.
La codificación de URL no es Base64: para meter datos binarios en una URL, usa la variante segura para URL del codificador Base64. Los tokens que viajan en URLs suelen ser JSON Web Tokens, que el decodificador JWT hace legibles.