😮

Base64を取り扱うときのちょっとした注意

2024/11/09に公開

前の記事 でちょこっと書いていた、Base64デコードの話。

エンコーダにもよるのでしょうが、Base64にエンコードされた文字列を確認すると、冒頭に以下のような記述が見受けられることがあります。

data:image/jpeg;base64,XXXXXX...

少なくともPHPのbase64_decode()では、この記述を取り除かないとエラーになります。
記述がある場合・ない場合の両方に対応できるよう、私は以下のようにして解決しました。

function getDecoded(string $encoded)
{
    // 対象は文字列冒頭になるので、選択前に冒頭部分だけ切り出す
    $test = substr($encoded, 0, 100);
    $pattern = '/^data:([A-Za-z0-9-\/]+);base64,/':
    if (preg_match($pattern, $test, $matches) {
        // MIME Type (image/jpeg) が入ってくる
        $mime = $matches[1];  
        $encoded = preg_replace($pattern, '', $encoded);
    }
    return base64_decode($enoded);
}

Discussion