¿Por qué base64_encode () agrega una barra inclinada “/” en el resultado?

Estoy codificando el sufijo de URL de mi aplicación:

$url = 'subjects?_d=1'; echo base64_encode($url); // Outputs c3ViamVjdHM/X2Q9MQ== 

Observe la barra antes de ‘X2’.

¿Por qué está pasando esto? Pensé que base64 solo sacaba AZ, 0-9 y ‘=’ como relleno. He intentado usar un codificador base64 en línea para verificar, y parece que base64 siempre hace esto. No puedo decir si es el guión bajo “_” o el signo de interrogación “?” o el “=” tal vez?

No. El alfabeto Base64 incluye AZ, az, 0-9 y + y / .

Puede reemplazarlos si no le importa la portabilidad hacia otras aplicaciones.

Ver: http://en.wikipedia.org/wiki/Base64#Variants_summary_table

Puede usar algo como esto para usar sus propios símbolos en su lugar (reemplazar - y _ por cualquier cosa que desee, ¡siempre y cuando no esté en el alfabeto base64, por supuesto!).

El siguiente ejemplo convierte la base64 normal a base64url como se especifica en RFC 4648 :

 function base64url_encode($s) { return str_replace(array('+', '/'), array('-', '_'), base64_encode($s)); } function base64url_decode($s) { return base64_decode(str_replace(array('-', '_'), array('+', '/'), $s)); } 

Lo siento, pensaste mal. A-Za-z0-9 solo tiene 62 caracteres. Base64 utiliza dos caracteres adicionales, en caso de PHP / y + .

No hay nada especial en eso.

La base 64 “alfabeto” o “dígitos” son AZ, az, 0-9 más dos caracteres adicionales + (más) y / (barra inclinada).

Luego puede codificar / con% 2f si lo desea.

AZ tiene 26 caracteres. 0-9 es 10 caracteres. = es un personaje. Eso da un total de 37 caracteres, que es algo así como 64.

/ es uno de los 64 caracteres. Puedes ver una lista completa en la página de wikipedia .

Además de todas las respuestas anteriores, señalando que / es parte del alfabeto base64 esperado, debe tenerse en cuenta que la razón particular por la que vio un / en su cadena codificada, es porque cuando base64 codifica texto ASCII, la única forma de generar un / es tener un signo de interrogación en una posición divisible por tres.

Para base64, el juego de caracteres válido es: ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789 + /

the = se usa como relleno para los últimos bytes

METRO.

No está directamente relacionado, y suficientes personas arriba han respondido y explicado las soluciones bastante bien.

Sin embargo, yendo un poco fuera del scope de las cosas. Si desea texto base legible, intente buscar en Base58 . Vale la pena considerarlo si solo quieres caracteres alfanuméricos.