如果您想保存从 Javascript canvas.toDataURL() 函数派生的数据,则必须将空格转换为加号。如果不这样做,解码后的数据将损坏
<?php
$encodedData = str_replace(' ','+',$encodedData);
$decocedData = base64_decode($encodedData);
?>
(PHP 4, PHP 5, PHP 7, PHP 8)
base64_decode — 解码使用 MIME base64 编码的数据
如果成功则返回解码后的数据,失败则返回 false
。返回的数据可能是二进制数据。
示例 #1 base64_decode() 示例
<?php
$str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw==';
echo base64_decode($str);
?>
以上示例将输出
This is an encoded string
如果您想保存从 Javascript canvas.toDataURL() 函数派生的数据,则必须将空格转换为加号。如果不这样做,解码后的数据将损坏
<?php
$encodedData = str_replace(' ','+',$encodedData);
$decocedData = base64_decode($encodedData);
?>
我在尝试让 base64_decode 解码长度超过 ~5k 个字符的 base64 字符串时遇到了一些麻烦。
base64 解码函数是模 4 和模 3 长度分段字符串之间的同态。这促使了一种分治法:将编码字符串拆分为模 4 个字符的子字符串,然后解码每个子字符串并将它们连接起来。
然后代替
<?php $decoded = base64_decode($encoded); ?>
对于大型 $encoded 字符串,使用以下方法更安全
<?php
$decoded = "";
for ($i=0; $i < ceil(strlen($encoded)/256); $i++)
$decoded = $decoded . base64_decode(substr($encoded,$i*256,256));
?>
其中 256 可以替换为足够小的模 4 自然数。
请注意,填充字符不限于“=”。字符串末尾任何无法解码的字符都将被解释为填充。如果 $strict 设置为 true,则填充字符当然仅限于 base64 字符。
示例
<?php
// $strict = false;
$str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw==';
echo base64_decode($str); // This is an encoded string
$str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw';
echo base64_decode($str); // This is an encoded string
$str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZwA';
echo base64_decode($str); // This is an encoded string
$str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZwA=';
echo base64_decode($str); // This is an encoded string
// $strict = true;
$str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw==';
echo base64_decode($str, true); // This is an encoded string
$str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw';
echo base64_decode($str, true); // This is an encoded string
$str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZwA';
echo base64_decode($str, true); // This is an encoded string
$str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZwA=';
echo base64_decode($str, true); // This is an encoded string
?>
此函数支持 RFC 4648 第 5 节“使用 URL 和文件名安全字母表的 Base 64 编码”中描述的“base64url”。
<?php
function base64url_decode($base64url)
{
$base64 = strtr($base64url, '-_', '+/');
$plainText = base64_decode($base64);
return ($plainText);
}
?>
用于 URL 参数/文件名的 Base64,符合 RFC 4648。
默认情况下,在编码时删除填充,因为它解码不需要,并且使 URL 免于 % 编码。
<?php
函数 base64url_encode($data, $pad = null) {
$data = str_replace(array('+', '/'), array('-', '_'), base64_encode($data));
if (!$pad) {
$data = rtrim($data, '=');
}
return $data;
}
函数 base64url_decode($data) {
return base64_decode(str_replace(array('-', '_'), array('+', '/'), $data));
}
函数 is_base64($str){
if($str === base64_encode(base64_decode($str))){
return true;
}
return false;
}
---------------------------------------------------------------------------
---------------------------------------------------------------------------
---------------------------------------------------------------------------
$str = 'VGhpcyBpcyBiYXNlNjQgZW5jb2RlIHN0cmluZw==';
if(is_base64($str)){
print base64_decode($str);
}