The whole thing needs a clean-up (mostly for readability). Try this...
add_shortcode('gallerybl', function($atts, $content = null) {
extract(shortcode_atts(array(
'image' => null,
'href' => null,
'title' => null
), $atts));
// escape all atts for HTML
$image = htmlspecialchars($image);
$title = htmlspecialchars($title);
$href = htmlspecialchars($href);
$imgMarkup = sprintf('<span class="gallery_bl_img"><img src="%s" alt="%s"></span>',
$image, $title);
if ($href) {
$imgMarkup = sprintf('<a href="%s" title="%s">%s</a>',
$href, $title, $imgMarkup);
}
ob_start();
?>
<div class="gallery_bl_container">
<?php if ($title) : ?>
<span class="gallery_bl_title"><?= $title ?></span>
<?php endif ?>
<?= $imgMarkup ?>
<?php if ($content) : ?>
<span class="gallery_bl_content">
<?= do_shortcode($content) ?>
<?php if ($href) : ?>
<a href="#" title="<?= $title ?>">READ MORE</a>
<?php endif ?>
</span>
<?php endif ?>
</div>
<?php
return ob_get_clean();
});