【发布时间】:2015-12-19 13:23:41
【问题描述】:
我正在使用 ob_start() 等来缓冲一些输出,同时包含一个带有 HTML 代码的 php 模板文件。下面是模板文件示例:
<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);,但我不确定这是否合适,因为 - 正如我上面所写 - 我无法自己重现错误的输出。
【问题讨论】:
-
完全不清楚您要在这里解决什么问题。您声明此代码不会为您产生不希望的结果,但您还声明您有不希望的结果(可能不是您可以自己重现的结果)。这些不受欢迎的结果从何而来?生成它们的代码在哪里?
-
问题出现在我的一个插件用户的网站上,对我来说一切正常。正如我在示例 sn-p 中显示的那样,在这种情况下,链接已断开,因为从顶部的模板中,换行符被转换为插入锚内的中断。
标签: php output buffer line-breaks ob-start