2024 年日本 PHP 研討會

base64_decode

(PHP 4, PHP 5, PHP 7, PHP 8)

base64_decode解碼以 MIME base64 編碼的資料

描述

base64_decode(字串 $string, 布林值 $strict = false): 字串|false

解碼 base64 編碼的 string

參數

string

已編碼的資料。

strict

如果 strict 參數設為 true,那麼當輸入的字串包含 base64 字母表以外的字元時,base64_decode() 函式將返回 false。否則,無效字元將被靜默忽略。

返回值

返回已解碼的資料,失敗時返回 false。返回的資料可能是二進位資料。

範例

範例 #1 base64_decode() 範例

<?php
$str
= 'VGhpcyBpcyBhbiBlbmNvZGVkIHN0cmluZw==';
echo
base64_decode($str);
?>

上述範例將輸出

This is an encoded string

參見

新增註釋

使用者貢獻的註釋 6 則註釋

76
winkelnkemper at googlemail dot com
13 年前
如果您想儲存從 Javascript canvas.toDataURL() 函式衍生的資料,您必須將空格轉換為加號。 如果您不這樣做,解碼的資料將會損毀。

<?php
$encodedData
= str_replace(' ','+',$encodedData);
$decocedData = base64_decode($encodedData);
?>
3
martinstaemmler at gmx dot net
15 年前
我嘗試讓 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 的倍數的自然數。
0
pete panic
10 個月前
請注意,填充字元不限於「=」。字串結尾處任何無法解碼的字元都會被解釋為填充字元。當然,如果 $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); // 這是已編碼的字串
?>
2
Tom
17 年前
此函式支援 RFC 4648 第 5 節「使用 URL 和檔案名稱安全字母的 Base 64 編碼」中描述的「base64url」。

<?php
function base64url_decode($base64url)
{
$base64 = strtr($base64url, '-_', '+/');
$plainText = base64_decode($base64);
return (
$plainText);
}
?>
0
walf
9 年前
適用於 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));
}
-5
user at sfdsfd dot com
5 年前
函式 is_base64($str){
if($str === base64_encode(base64_decode($str))){
return true;
}
return false;
}

---------------------------------------------------------------------------
---------------------------------------------------------------------------
---------------------------------------------------------------------------

$str = 'VGhpcyBpcyBiYXNlNjQgZW5jb2RlIHN0cmluZw==';

if(is_base64($str)){
print base64_decode($str);
}
To Top