PHP xmlwriter 文档中的换行符
Line breaks in PHP xmlwriter document
我有一个 XML 使用 XMLWriter
创建的提要。它在 PHP 5.6 vagrant box 上的开发中完美运行。在实时服务器上,运行 PHP 5.4 提要无法呈现消息:
This page contains the following errors:
error on line 3 at column 6: XML declaration allowed only at the start of the document
如果您查看源代码,它看起来像这样:
不知何故,XML 文档中添加了几行。服务器之间的唯一区别是 PHP 版本(据我所知)。
这是 XML编写器代码的前几行:
$xml = new XMLWriter();
$xml->openURI('php://output');
$xml->startDocument("1.0");
$xml->setIndent(true);
$xml->startElement("propertyList");
$xml->writeAttribute('date', date('Y-m-d-H:i:s'));
有什么办法解决这个问题吗?
从 PHP 5.4 到 5.6 有不少变化...更不用说 libxml...
第一件事显然是确保在开始 <?php
标签之前或结束标签之后没有白色 space(如果使用的话)。
如果您能确定引入新行的时间(假设它们是新行...您是否使用过十六进制查看器之类的东西?),将会有所帮助。尝试写入临时位置 - 想确定这是在服务页面时还是在 xmlWriter 正在输出时发生。
想到的事情...
也许明确说明 indetString
应该是什么。 $xml->setIndentString(" ");
默认编码...?也许尝试得到那套。期望打开 xml 标签... encoding="UTF-8"
。使用 startDocument('1.0', 'utf-8');
并且可能应该发送 header,例如:header('Content-Type: application/xml; charset=UTF-8');
。你的default_charset
是UTF-8吗?
这两种环境之间还有哪些区别?像short_open_tag
等
LIBXML_HTML_NOIMPLIED
? 5.4 左右有变化吗?
解决方法:
在开始写入输出流之前尝试调用 ob_clean
。
使用trim
.
升级服务器,这几天谁要上5.4:)
您的问题是页眉的位置('Content-type: text/xml');
试试这个并确保在 header() 调用之前没有任何内容:
<?php
header('Content-type: text/xml');
...
?>
我想这对你有帮助!
我有一个 XML 使用 XMLWriter
创建的提要。它在 PHP 5.6 vagrant box 上的开发中完美运行。在实时服务器上,运行 PHP 5.4 提要无法呈现消息:
This page contains the following errors:
error on line 3 at column 6: XML declaration allowed only at the start of the document
如果您查看源代码,它看起来像这样:
不知何故,XML 文档中添加了几行。服务器之间的唯一区别是 PHP 版本(据我所知)。
这是 XML编写器代码的前几行:
$xml = new XMLWriter();
$xml->openURI('php://output');
$xml->startDocument("1.0");
$xml->setIndent(true);
$xml->startElement("propertyList");
$xml->writeAttribute('date', date('Y-m-d-H:i:s'));
有什么办法解决这个问题吗?
从 PHP 5.4 到 5.6 有不少变化...更不用说 libxml...
第一件事显然是确保在开始 <?php
标签之前或结束标签之后没有白色 space(如果使用的话)。
如果您能确定引入新行的时间(假设它们是新行...您是否使用过十六进制查看器之类的东西?),将会有所帮助。尝试写入临时位置 - 想确定这是在服务页面时还是在 xmlWriter 正在输出时发生。
想到的事情...
也许明确说明
indetString
应该是什么。$xml->setIndentString(" ");
默认编码...?也许尝试得到那套。期望打开 xml 标签...
encoding="UTF-8"
。使用startDocument('1.0', 'utf-8');
并且可能应该发送 header,例如:header('Content-Type: application/xml; charset=UTF-8');
。你的default_charset
是UTF-8吗?这两种环境之间还有哪些区别?像
short_open_tag
等LIBXML_HTML_NOIMPLIED
? 5.4 左右有变化吗?
解决方法:
在开始写入输出流之前尝试调用
ob_clean
。使用
trim
.升级服务器,这几天谁要上5.4:)
您的问题是页眉的位置('Content-type: text/xml');
试试这个并确保在 header() 调用之前没有任何内容:
<?php
header('Content-type: text/xml');
...
?>
我想这对你有帮助!