Base64URL cambia dos caracteres alfabéticos: el signo más estándar de Base64 se convierte en un guión y la barra diagonal se convierte en un guión bajo. La información codificada no cambia. La variante ayuda cuando el protocolo circundante le da un significado especial a más o barra, pero no exime el valor de cada URL o regla de aplicación.
Utilice un vector que exponga la diferencia.
Los bytes FB FF se codifican como +/8= en estándar Base64 y -_8= en Base64URL. Una prueba como Hello produce solo caracteres alfabéticos compartidos, por lo que no puede revelar si la conversión segura URL está funcionando.
const standard = btoa(String.fromCharCode(251, 255));
const urlSafe = standard.replace(/\+/g, '-').replace(/\//g, '_');
console.log(standard); // +/8=
console.log(urlSafe); // -_8=
El relleno es un acuerdo separado
Muchos formatos de tokens omiten los signos igual finales, mientras que otros sistemas los conservan. Cambiar el alfabeto y eliminar el relleno son decisiones independientes. Si la longitud de una entrada sin relleno deja resto 2 al dividirse entre 4, se añaden dos signos «=»; si el resto es 3, se añade uno. Un resto de 1 no se puede corregir únicamente añadiendo relleno, porque un carácter de seis bits no basta para representar un byte completo.
Al validar, verifique también los bits no utilizados en el último carácter. Un decodificador que los ignore puede aceptar varias cadenas para la misma secuencia de bytes. Esa ambigüedad puede ser importante cuando una aplicación compara cadenas codificadas en lugar de bytes decodificados. Un productor canónico debe emitir una representación acordada.
No confunda el análisis de consultas con la decodificación Base64
El análisis de consultas de estilo de formulario interpreta un signo más literal como un espacio. Por lo tanto, un valor estándar Base64 pegado sin escape en una consulta puede dañarse antes de que el decodificador lo vea. Construya la consulta con URLSearchParams, o utilice la variante Base64URL si el protocolo de recepción lo especifica.
const query = new URLSearchParams({ payload: '+/8=' });
console.log(query.toString()); // payload=%2B%2F8%3D
console.log(query.get('payload')); // +/8=
No reemplace automáticamente cada espacio con un signo más: un espacio puede ser un formato genuino o evidencia de otro error. Conserve la fuente, identifique la capa de transporte que la cambió y aplique una corrección deliberada. Para los segmentos JWT, utilice las reglas Base64URL del formato de token en lugar de inventar una política de reparación general.
Los alfabetos estándar y seguro URL se describen en RFC 4648. Su integración aún necesita opciones explícitas de relleno, aceptación de espacios en blanco y longitud máxima.