(PHP 4, PHP 5, PHP 7, PHP 8)
base64_decode — Decodes data encoded with MIME base64
Decodes a base64 encoded
string
.
Returns the decoded data or
false
on failure. The returned data may be
binary.
Example #1 base64_decode() example
<?php
$str
=
'VGhpcyBpcyBhbiBlbmNvZGVcIHN0cmluZw=='
;
echo
base64_decode
(
$str
);
?>
The above example will output:
This is an encoded string
If you want to save data that is derived from a Javascript canvas.toDataURL() function, you have to convert blancs into plusses. If you do not do that, the decoded data is corrupted:<?php
$encodedData = str_replace(' ','+',$encodedData);$decocedData= base64_decode($encodedData);
?>
I had some trouble trying to let base64_decode decode base64-strings longuer than ~5c chars.
The base64-decoding function is a homomorphism between modulo 4 and modulo 3-length segmented strings. That motivates a divide and conquer approach: Split the encoded string into substrings counting modulo 4 chars, then decode each substring and concatenate all of them.
Then instead of<?php $decoded = base64_decode($encoded); ?>
for big $encoded strings, it's saver to use<?php
$decoded = "";
for ($i=0; $i< ceil(strlen($encoded)/256); $i++)$decoded= $decoded.base64_decode(substr($encoded,$i*256,256));
?>
where 256 can be replaced by a sufficiently small modulo 4 natural.
This function suppors "base64url" as described in Section 5 of RFC 4648, "Base 64 Encoding with URL and Filename Safe Alphabet"<?php
functionbase64url_decode($base64url)
{$base64= strtr($base64url, '-_', '+/');$plainText= base64_decode($base64);
return ($plainText);
}?>
Base64 for URL parameters/filenames, that adhere to RFC 4648.
Defauls to dropping the padding on encode since it's not required for decoding, and keeps the URL free of % encodings.<?php
functionbase64url_encode($data, $pad= null) {$data= str_replace(array('+', '/'), array('-', '_'), base64_encode($data));
if (!$pad) {$data= rtrim($data, '=');
}
return$data;
}
function base64url_decode($data) {
returnbase64_decode(str_replace(array('-', '_'), array('+', '/'), $data));
}
Note, that padding characters are not limited to "=". any character(s) at the end of the string that cannot be decoded will be interpreted as padding. if $strict is set to true, of course padding characters are limited to base64 characters.
examples:<?php
// $strict = false;$str= 'VGhpcyBpcyBhbiBlbmNvZGVcIHN0cmluZw==';
echo base64_decode($str); // This is an encoded string$str= 'VGhpcyBpcyBhbiBlbmNvZGVcIHN0cmluZw';
echo base64_decode($str); // This is an encoded string$str= 'VGhpcyBpcyBhbiBlbmNvZGVcIHN0cmluZwA';
echo base64_decode($str); // This is an encoded string$str= 'VGhpcyBpcyBhbiBlbmNvZGVcIHN0cmluZwA=';
echo base64_decode($str); // This is an encoded string
// $strict = true;$str= 'VGhpcyBpcyBhbiBlbmNvZGVcIHN0cmluZw==';
echo base64_decode($str, true); // This is an encoded string$str= 'VGhpcyBpcyBhbiBlbmNvZGVcIHN0cmluZw';
echo base64_decode($str, true); // This is an encoded string$str= 'VGhpcyBpcyBhbiBlbmNvZGVcIHN0cmluZwA';
echo base64_decode($str, true); // This is an encoded string$str= 'VGhpcyBpcyBhbiBlbmNvZGVcIHN0cmluZwA=';
echo base64_decode($str, true); // This is an encoded string?>