phpday 2025 - Call For Papers

base64_decode

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

base64_decode对使用 MIME base64 编码的数据进行解码

说明

base64_decode(string $string, bool $strict = false): string|false

对 base64 编码的 string 进行解码。

参数

string

编码过的数据。

strict

当设置 stricttrue 时,一旦输入的数据超出了 base64 字母表,将返回 false。 否则会静默丢弃无效的字符。

返回值

返回解码后数据, 或者在失败时返回 false。返回的数据可能是二进制的。

示例

示例 #1 base64_decode() 示例

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

以上示例会输出:

This is an encoded string

参见

添加备注

用户贡献的备注 6 notes

up
76
winkelnkemper at googlemail dot com
13 years ago
If you want to save data that is derived from a Javascript canvas.toDataURL() function, you have to convert blanks into plusses. If you do not do that, the decoded data is corrupted:

<?php
$encodedData
= str_replace(' ','+',$encodedData);
$decocedData = base64_decode($encodedData);
?>
up
3
martinstaemmler at gmx dot net
15 years ago
I had some trouble trying to let base64_decode decode base64-strings longer than ~5k 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.
up
0
pete panic
10 months ago
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 = '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
?>
up
2
Tom
18 years ago
This function supports "base64url" as described in Section 5 of RFC 4648, "Base 64 Encoding with URL and Filename Safe Alphabet"

<?php
function base64url_decode($base64url)
{
$base64 = strtr($base64url, '-_', '+/');
$plainText = base64_decode($base64);
return (
$plainText);
}
?>
up
0
walf
9 years ago
Base64 for URL parameters/filenames, that adhere to RFC 4648.
Defaults to dropping the padding on encode since it's not required for decoding, and keeps the URL free of % encodings.

<?php
function base64url_encode($data, $pad = null) {
$data = str_replace(array('+', '/'), array('-', '_'), base64_encode($data));
if (!
$pad) {
$data = rtrim($data, '=');
}
return
$data;
}
function
base64url_decode($data) {
return
base64_decode(str_replace(array('-', '_'), array('+', '/'), $data));
}
up
-5
user at sfdsfd dot com
5 years ago
function 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