traductor online base64_decode php encoding base64

php - online - ¿Por qué base64_encode() agrega una barra inclinada "/" en el resultado?



hash base64 (7)

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?


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.


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


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

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


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.


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 que 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)); }


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

the = se usa como relleno para los últimos bytes

METRO.