我有一个从Javascript函数.toDataUrl()创建的编码字符串。每次我尝试使用PHP base64_decode()将其转换为二进制时,它会截断二进制文件。我已经尝试了以下各种项目:
//First Attempt
$encoded = str_replace('data:image/png;base64,', '', $sig);
$decodedstring = base64_decode(str_replace(array(' ', '_'), array('+', '/'), $encoded));
$decodedstring = base64_decode(chunk_split($encoded));
//2nd attempt
$encoded = str_replace([' ','data:image/png;base64,'], ['+',''], $sig);
$decodedstring = "";
for ($i=0; $i < ceil(strlen($encoded)/256); $i++)
$decodedstring = $decodedstring . base64_decode(substr($encoded,$i*256,256));
//Other attempt
$decodedstring = base64_decode( str_replace(['data:image/png;base64,', ' '], ['','+'], $sig) );
这些都不会产生正确的文件。另外需要注意的是,当我使用标准的png base64在线解码器时,图像看起来100%正确,因此问题似乎在转换中发生。
有人会有额外的想法。我花了几天时间试图研究这个没有运气。
答案 0 :(得分:0)
这是我将通过ajax发送的数据转换为php的函数。它一直对我来说完美无瑕。
function prepare_image($string, $file_name) {
list($type, $string) = explode(';', $string);
list(, $string) = explode(',', $string);
$string = base64_decode($string);
return $string;
}