Php将编码数据返回到ajax,当它甚至不在json_encode中时

The file I post below is being ajaxed from jQuery.
It returns encoded data (with question mark symbols and all). I am not even echoing the data or anything.
The only thing I send to the client is json_encode. The json_encode data comes after the encoded data.
When I do not call my base64_extension function, it all works properly.

EDIT
The code is no longer spitting out the encoded data. However, the function is returning 4 (not image). I am trying to understand why.

function base64_extension($base64)
{
$base64 = str_replace("data:image/png;base64,", "", $base64);

$base64 = imagecreatefromstring(base64_decode($base64));

if (!$base64) {
    return 0; /* Not image */
}

if (imagepng($base64, "tmp.png")) {
    imagedestroy($base64);
    unlink('tmp.png');
    return 1;
} else if (imagejpeg($base64, "tmp.jpg")) {
    imagedestroy($base64);
    unlink('tmp.jpg');
    return 2;
} else if (imagegif($base64, "tmp.gif")) {
    imagedestroy($base64);
    unlink('tmp.gif');
    return 3;
} else {
    return 4; /* Not image */
}
}

That is the function, here is the rest :

echo json_encode(array("status" => "success", "dreamID" => $data['dreamId'], "mime" => base64_extension($_POST['dream_pic'])));

mime returns as 1. So the function seems to work. Not sure why a bunch of encoded data gets returned to ajax. Thanks!