Delicious Bookmark this on Delicious Share on Facebook SlashdotSlashdot It! Digg! Digg



PHP : Function Reference : URL Functions : base64_decode

base64_decode

Decodes data encoded with MIME base64 (PHP 4, PHP 5)
string base64_decode ( string data [, bool strict] )

Example 2563. base64_decode() example

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

The above example will output:

This is an encoded string

Code Examples / Notes » base64_decode

php barryhunter co uk

To further expand on Jes' post:
I have also noticed the behaviour change (and tore heir out to trace it to base64_decode and this page), between php 4.3.11 and 4.4.7
(the same fix works on 4.4.7)


starson

To expand on Jes' post:
The change took place between 5.0.5 and 5.1.0.  Exactly where I don't know or care.
In short php <= 5.0.5's base64_decode( $string ) will assume that a space is meant to be a + sign where php >= 5.1.0's base64_decode( $string ) will no longer make that assumption.  I did not see this noted in the change log.
Please note that, as of this writing, mb_convert_encoding( $string, "UTF-8", "BASE64" ) still behaves as base64_decode( $string ) did in php <= 5.0.5 regardless of the version of php you are running.


klaus fehrenbacher

this script can correct the bug
<?php
$enc = chunk_split(preg_replace('!\015\012|\015|\012!','',$enc));
$enc = base64_decode($enc);
?>


tom

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);
   }
   ?>


paul

The user notes posted here helped me a lot in writing the PHP code to upload uuencoded files to a server using $_POST. Hardest thing to figure out was why the files came out scrambled and corrupted. After comparing the original file with the file reconstructed by the uudecode script, I found out that a simple "stripcslashes" on the posted data will do the trick.
So, to upload any kind of uuencoded file using a POST:
1. send the raw file data to the PHP script
2. $uuencoded_data = stripcslashes($_POST['filedata']);
3. strip the marker lines from $uuencoded_data (first line, last line and second last line of the data. Each line is seperated by a LF (chr(10)) character.)
4. $decoded_data = uudecode($stripped_uuencoded_data); (this function can be found in the user notes here).
5. Use the script provided in one of the user notes on this page to write the decoded data to a binary file.
That should do the trick!


jes

I've come across an interesting issue with an external program that submits a gzcompressed base64_encoded string to PHP via POST. The external program encodes the string using the occasional " " (space) character, however if I encode the same original string within PHP (using base64_encode), it uses a "+" (plus) character wherever the external program would use a space. On my deployed machine, running PHP 4.3.9, base64_decode is fine with the " " (space) characters, but my test server running 5.1.4 is not. It took me a while to figure out that was the issue, but I ended up fixing it with a simple:
<?php
$post_data = str_replace(" ","+",$_POST['string'])
?>
This fix works on both the 4.3.9 and 5.1.4 machines. I am sure that the external program is probably not conforming to the standard, and it isn't a PHP problem per-se; but incase anybody else ever runs into that.


tobias

I was wondering how to decode attached images within mails. Basically they are mostly JPEG files, so it was obviously to write a function that decodes JPEG images.
I guess the plainest way to do so was the following:
<?php
function base64_to_jpeg( $inputfile, $outputfile ) {
 /* read data (binary) */
 $ifp = fopen( $inputfile, "rb" );
 $imageData = fread( $ifp, filesize( $inputfile ) );
 fclose( $ifp );
 /* encode & write data (binary) */
 $ifp = fopen( $outputfile, "wb" );
 fwrite( $ifp, base64_decode( $imageData ) );
 fclose( $ifp );
 /* return output filename */
 return( $outputfile );
}
?>
This function decodes the given inputfile (a filename!) and saves it to the given outputfile (a filename as well) and then returns the output filename for further usage (e.g. redirect, imagejpeg() and so on).
I thought that might be helpful.


morgangalpin att gmail dotty com

I was having trouble with base64_decode returning false if the data to be decoded wasn't actually encoded. It turns out that it is a bug that exists in PHP version 5.1.2, which I'm using, but it has been fixed in CVS. The relevant bug is: http://bugs.php.net/bug.php?id=37244 "base64_decode violates RFC 3548". The fix may become available in 5.2.4 or 6 or whatever is coming next.
Since I'm not able to upgrade PHP to the latest version, I needed a way to check if some data had actually been encoded before trying to decode it. Here is the function I've used; I hope it helps someone.
<?php
 /**
  * Check a string of base64 encoded data to make sure it has actually
  * been encoded.
  *
  * @param $encodedString string Base64 encoded string to validate.
  * @return Boolean Returns true when the given string only contains
  * base64 characters; returns false if there is even one non-base64 character.
  */
 function checkBase64Encoded($encodedString) {
   $length = strlen($encodedString);
   
   // Check every character.
   for ($i = 0; $i < $length; ++$i) {
     $c = $encodedString[$i];
     if (
       ($c < '0' || $c > '9')
       && ($c < 'a' || $c > 'z')
       && ($c < 'A' || $c > 'Z')
       && ($c != '+')
       && ($c != '/')
       && ($c != '=')
     ) {
       // Bad character found.
       return false;
     }
   }
   // Only good characters found.
   return true;
 }
?>


nsayer

I used to do uudecode as a C module, but I've discovered a really fast way to do it in PHP. Here it is:
<?php
function uudecode($encode) {
 $b64chars="ABCDEFGHIJKLMNOPQRSTUVWXYZ\
abcdefghijklmnopqrstuvwxyz0123456789+/";
 $encode = preg_replace("/^./m","",$encode);
 $encode = preg_replace("/\n/m","",$encode);
 for($i=0; $i<strlen($encode); $i++) {
   if ($encode[$i] == '`')
     $encode[$i] = ' ';
   $encode[$i] = $b64chars[ord($encode[$i])-32];
 }
 while(strlen($encode) % 4)
   $encode .= "=";
 return base64_decode($encode);
}
?>
This is the PHP equivalent to perl's unpack("u",___). That is, you need to strip the 'begin' and 'end' lines from the typical uuencoded file.


gabor dot barta

Hi,
I just would like to add a comment, i was strugging with it for some time. So i opened a POP3 mailbox fopen, and listed the emails with attachments. I copied the base64 encoded text to a file and saved it. Then i tried to decode this file to a jpeg picture, and it just didnt work... Then i realized that there were some spaces in the text file....
Hope it will help anyone.
Bobi


dhirendrak

Heading : Your customizable encode
and decode function.
A customizable encoded and decode
Function which can encode and decode
the data. You need to pass variable to
the encode function to encrypt and
whenever you want you can get the
data by using decode function.
Cracking / hacking of encoded value
is impossible, until user know the
actual coding.
<?php
function encoded($ses)
{
 $sesencoded = $ses;
 $num = mt_rand(3,9);
 for($i=1;$i<=$num;$i++)
 {
    $sesencoded =
    base64_encode($sesencoded);
 }
 $alpha_array =
 array('Y','D','U','R','P',
 'S','B','M','A','T','H');
 $sesencoded =
 $sesencoded."+".$alpha_array[$num];
 $sesencoded =
 base64_encode($sesencoded);
 return $sesencoded;
}//end of encoded function
function decoded($str)
{
  $alpha_array =
  array('Y','D','U','R','P',
  'S','B','M','A','T','H');
  $decoded =
   base64_decode($str);
  list($decoded,$letter) =
  split("\+",$decoded);
  for($i=0;$i<count($alpha_array);$i++)
  {
  if($alpha_array[$i] == $letter)
  break;
  }
  for($j=1;$j<=$i;$j++)
  {
     $decoded =
      base64_decode($decoded);
  }
  return $decoded;
}//end of decoded function
?>
http://members.lycos.co.uk/dhirendrak


dharwood

Encode/DEcode PAGE.
Here is a page that will accept plain text password and return an encoded password.  It will also do the opposite.  It will allow you to enter an encoded password and generate the plain text password... (just in case you forgot your password.)
<?php
if (isset($_POST['text_pass'])){
$but=$_POST['button'];
process_form();
}else{
print_form();
}
function process_form(){
 switch ($_POST['button']){
   case "Get Encoded":
$text_pass = $_REQUEST['text_pass'];
   echo "<html>\n";
echo "<head>\n";
echo "<title>Password Encoding</title>\n";
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n";
echo "</head>\n";
echo "<body>\n";
echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"4\" width=\"100%\">\n";
echo "<div align=\"center\">\n";
echo "<h3 align=center>Password Encoding Page</h3>\n";
echo "<table align=\"center\" border=\"0\">\n";
echo "<tr>\n";
echo "<td ><b>You Entered:  </b></td>\n";
echo "<td>$text_pass</td>\n";
echo "</tr>\n";
$test = base64_encode(serialize($text_pass));
echo "<tr>\n";
echo "<td ><b>Your encoded password (base 64) is:  </b></td>\n";
echo "<td>$test</td>\n";
echo "</tr>\n";
$untest = unserialize(base64_decode($test));
echo "<tr>\n";
echo "<td ><b>To double test, your UNencoded password (base 64) is:  </b></td>\n";
echo "<td>$untest</td>\n";
echo "</tr>\n";
echo "</table>\n";
break;
   case "Get UNEncoded":
$text_pass = $_REQUEST['text_pass'];
   echo "<html>\n";
echo "<head>\n";
echo "<title>Password Encoding</title>\n";
echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n";
echo "</head>\n";
echo "<body>\n";
echo "<table border=\"0\" cellspacing=\"0\" cellpadding=\"4\" width=\"100%\">\n";
echo "<div align=\"center\">\n";
echo "<h3 align=center>Password Encoding Page</h3>\n";

echo "<table align=\"center\" border=\"0\">\n";
echo "<tr>\n";
echo "<td ><b>You Entered:  </b></td>\n";
echo "<td>$text_pass</td>\n";
echo "</tr>\n";
$untest = unserialize(base64_decode($text_pass));
echo "<tr>\n";
echo "<td ><b>Your UNencoded password (base 64) is:  </b></td>\n";
echo "<td>$untest</td>\n";
echo "</tr>\n";
echo "</table>\n";

   default:

       break;
 }
}
function print_form(){
   echo "<html>\n";
   echo "<head>\n";
   echo "<title>Password Encoding</title>\n";
   echo "<meta http-equiv=\"Content-Type\" content=\"text/html; charset=iso-8859-1\">\n";
   echo "</head>\n";
   echo "<body>\n";
echo "<table border=\"0\" cellspacing=\"0\" width=\"100%\">\n";
   echo "<div align=\"center\">\n";
echo "<h3 align=center>Password Encoding Page</h3>\n";
   echo "<tr>\n";
   echo "<form action=\"$_SERVER[PHP_SELF]\" method=\"post\">\n";
   echo "<table align=\"center\" border=\"0\">\n";
   echo "<tr>\n";
   echo "<td align=\"right\"><b>Password to Encode/Decode:</b></td>\n";
   echo "<td align=\"right\">";
   echo "  <input type=\"text\" name=\"text_pass\" size=\"30\" >\n";
   echo "</td>\n";
   echo "</tr>\n";
   echo "</tr>\n";
   echo "<tr>\n";
echo "<tr>\n";
echo "&nbsp;\n";
echo "</tr>\n";
   echo "<td >";
   echo "<input type=\"submit\" name=\"button\" value=\"Get Encoded\">
\n";
   echo "</td>";
   echo "<td >";
echo "<input type=\"submit\" name=\"button\" value=\"Get UNEncoded\">
\n";
   echo "</td>";
   echo "</tr>\n";
   echo "</table>\n";
   echo "</form>\n";
echo "<tr>\n";
echo "</table>\n";
echo "</body>\n";
   echo "</html>\n";
}
?>


Change Language


Follow Navioo On Twitter
base64_decode
base64_encode
get_headers
get_meta_tags
http_build_query
parse_url
rawurldecode
rawurlencode
urldecode
urlencode
eXTReMe Tracker