😮
Base64を取り扱うときのちょっとした注意
前の記事 でちょこっと書いていた、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