I am encoding the URL suffix of my application:
$url = 'subjects?_d=1'; echo base64_encode($url); // Outputs c3ViamVjdHM/X2Q9MQ==
Notice the slash before ‘X2’.
Why is this happening? I thought base64 only outputted A-Z, 0-9 and ‘=’ as padding?
Advertisement
Answer
No. The Base64 alphabet includes A-Z, a-z, 0-9 and +
and /
.
You can replace them if you don’t care about portability towards other applications.
See: http://en.wikipedia.org/wiki/Base64#Variants_summary_table
You can use something like these to use your own symbols instead (replace -
and _
by anything you want, as long as it is not in the base64 base alphabet, of course!).
The following example converts the normal base64 to base64url as specified in 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)); }