如果您想儲存從 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); // 這是已編碼的字串
$str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw';
echo base64_decode($str); // 這是已編碼的字串
$str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZwA';
echo base64_decode($str); // 這是已編碼的字串
$str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZwA=';
echo base64_decode($str); // 這是已編碼的字串
// $strict = true;
$str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw==';
echo base64_decode($str, true); // 這是已編碼的字串
$str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw';
echo base64_decode($str, true); // 這是已編碼的字串
$str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZwA';
echo base64_decode($str, true); // 這是已編碼的字串
$str = 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZwA=';
echo base64_decode($str, true); // 這是已編碼的字串
?>
此函式支援 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);
}