PHP输出缓冲区损坏包含内容

时间:2017-04-11 23:21:12

标签: php output-buffering

陌生的事情......很难做出这个"问题"。我有一个用PHP和JavaScrip制作的整个网站。内容以多种方式处理,访问mySQL和文件。一种方法是包含一个构建html字符串的php。为了包含在网站结构中,我做了一个简单的输出缓冲区:

ob_start();
include_once($url);
$output = ob_get_contents();
ob_end_clean();
echo_cont($output);

echo_cont只是将内容存储在以后的正确位置。但是一个简单的"阅读一些照片文件并构建相册的页面已损坏。部分html缺失,奇怪的变化如下:

  • 类=" BUTTON2"什么时候应该是class =" button2"所以元素变成了 unformatted
  • " http www.mywebsite.com.br文件夹"当它想要的时候 " HTTP // www.mywebsite.com.br /文件夹" ...

正在包含其他页面。

我今年开始在这个网站上使用输出缓冲区,我不知道这可能是一个问题还是其他的东西,但是不容易寻找线索,不容易运行网站外的页面,因为它依赖于几个库 - 有点复杂。它接口给我一个编码的文本,后来解码不好。你觉得怎么样?

编辑:echo_cont函数:

$htmlConteudo = '';
function echo_cont($html){
    global $htmlConteudo;
    $htmlConteudo .= $html;
}

1 个答案:

答案 0 :(得分:0)

我决定用贡献者的想法回答我自己的问题,因为问题不是关于php功能,而是我调查的方式 - 并且可能会在你阅读我的答案时发生。

问题是:浏览器中显示的图像是对发送数据的解释,如开发人员窗口中显示的信息。不是原始数据,它是尝试从数据中生成xml / html文档。在这种情况下,原始数据需要先从浏览器解释中看到,并且可以使用这个简单的函数:

function strTag($xmlstr){
    $str = str_replace('<', '&lt;', $xmlstr);
    $str = str_replace('>', '&gt;', $str);
    $str = str_replace(' ', '&nbsp;', $str);
    return nl2br($str);
}

然后,数据被捕获:

ob_start();
include("www_pc/conteudo_imagens.php");
$output = ob_get_contents();
ob_clean();
echo(strTag($output));

现在是时候接近屏幕并检查所有细节了。就我而言,有一些像这样的标签:

<div style="float:left;width:80px;height:120px;margin:0px 5px 5px 0px;>

你可以看到样式声明结尾处缺少引号(它在深夜编码)。因此,当浏览器尝试重建xml并进行自己的解释时,在尝试查找错误时会混淆分析。我在Safari和Firefox中进行测试,因此不是浏览器故障,而是浏览器AI限制。得看原始代码,AI只在电影中出现!