Я использую ob_start () и т. Д. Для буферизации некоторого вывода при включении файла шаблона php с кодом HTML. Вот пример файла шаблона:
<div class="prefix-box__thumb">
<a class="prefix-box__image-link"href="<?php echo $this->get_product_url(); ?>" title="<?php echo $this->get_product_link_title(); ?>" rel="nofollow" target="_blank">
<img class="prefix-box__image" src="<?php echo $this->get_product_image(); ?>" alt="<?php echo $this->get_product_image_alt(); ?>" />
</a>
<?php if ( $this->get_product_rating() ) { ?>
<div class="prefix-box__rating">
<?php echo $this->get_product_star_rating(); ?>
<?php if ( $this->get_product_reviews() ) { ?>
<div class="prefix-box__reviews"><?php echo $this->get_product_reviews(); ?></div>
<?php } ?>
</div>
<?php } ?>
</div>
Как вы можете видеть, я выделил строки, чтобы сделать их более читабельными для меня как разработчика.
К сожалению, на некоторых веб-сайтах (не на моих серверах, поэтому я не могу воспроизвести его) эти отступы приводят к разрывам строк и пустым абзацам при возврате или, скорее, печати результата ob_get_clean.
В качестве примера для сломанного результата:
<a class="prefix-box__image-link" <br="" ... >...</a>
or
<p> </p>
Для разрывов строк я думал об использовании $str = str_replace(array("\r", "\n"), '', $str);
но я не уверен, что это подойдет, потому что — как я писал выше — я не могу воспроизвести неправильный вывод самостоятельно.
Я попробовал строку, о которой упоминал выше, и, к счастью, это решает проблему и удалил разрывы строк из буферизованного вывода:
$str = str_replace(array("\r", "\n"), '', $str);
Других решений пока нет …