【问题标题】:PHP output buffering with template file results in line breaks and empty paragraphs带有模板文件的 PHP 输出缓冲导致换行和空段落
【发布时间】: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


【解决方案1】:

我尝试了上面提到的行,幸运的是这解决了问题并从缓冲输出中删除了换行符:

$str = str_replace(array("\r", "\n"), '', $str);

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-08-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多