通过简单调用unserialize()函数,可以在输出缓冲区-wtf中添加换行符


Simple calling unserialize() function adds line break into output buffer - wtf?

我正在编写支付网关,需要向支付服务器抛出xml响应。但,突然间,我的XML被生成文档开头的换行符破坏了。

我使用Kohana 3框架,它使用PHP函数unserialize()来检索会话对象,并在调用该函数时将换行打印到输出缓冲区。此代码:

<?php
echo 123;
$object = unserialize($data);
document_creation_and_outputting;

返回如下结果:

123
document_body

但是这个代码:

<?php
$object = unserialize($data);
echo 123;
document_creation_and_outputting;

返回这样的文档:

(empty line)
123document_body

所以你可以看到,如果生成的doc_body没有换行符,那么我的脚本在第一行就没有换行符(因为我们在第一个例子中没有看到"123"之前的换行符),而且,我保证,我使用UTF-8而没有BOM。

所以我的问题是:发生了什么?


在输出生成的文档之前,我使用ob_end_clean()清理缓冲区,它解决了我的问题,但我真的不理解unserialize()的行为。

我是个白痴。unserialize()收到以下消息:我的失败

对不起,伙计们。我刚吐了。