【问题标题】:PHP base64_decode() .toDataURL()PHP base64_decode() .toDataURL()
【发布时间】:2017-12-04 21:06:28
【问题描述】:

我有一个从 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% 正确,因此问题似乎发生在转换中。

有没有人有其他想法。我花了几天时间试图研究这个没有运气。

【问题讨论】:

  • 没有任何示例数据,我们无法重现该问题。
  • @Sammitch 不幸的是,我无法发布这条特定的数据,因为它是一个签名。此外,我们无法使用随机签名自己复制它。

标签: javascript php base64 png todataurl


【解决方案1】:

这是我制作的一个函数,用于将通过 ajax 发送的数据转换为 php。它对我来说总是完美无缺。

function prepare_image($string, $file_name) {
    list($type, $string) = explode(';', $string);
    list(, $string) = explode(',', $string);
    $string = base64_decode($string);
    return $string;
}

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2012-01-12
    • 1970-01-01
    • 2014-07-27
    • 2018-08-06
    • 1970-01-01
    • 1970-01-01
    • 2018-03-07
    • 1970-01-01
    相关资源
    最近更新 更多