我正在编写支付网关,需要向支付服务器抛出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()
的行为。
对不起,伙计们。我刚吐了。