我有这个PHP脚本正在从我们的这个伙伴那里捕获一个变量。在变量中是一串XML。当他们处理文件时,它会不断出现这样的错误:
警告: SimpleXMLElement :: __ construct(): 实体:第19行:解析器错误: 标记中数据的过早结束 描述第19行......然后 列出脚本路径。
以下是传递的数据示例:
xml=<Posting>
<description><![CDATA[<p>this is a test posting.</p>
Here is some more of the test.]]></description>
</Posting>
我设置了一个测试文件,其中包含一个textarea,其代码与上面显示的相同,并命名为xml。当我提交它时,脚本工作正常,并按照应有的顺序完成。伙伴的日志以'HTTP原始请求为POST'开头。不确定这是否有所不同,但我认为越多细节越好。我在一个单独的服务器上也尝试过这个,但是当我发送数据时我的所有测试都工作,但是当合作伙伴发送数据时却没有。
以下是我捕捉数据的方式:
if ($_POST['xml']) {
$xmlstr = stripslashes($_POST['xml']);
$xml = simplexml_load_string($xmlstr, 'SimpleXMLElement', LIBXML_NOCDATA);
}
答案 0 :(得分:0)
我只是猜测,但问题可能在于数据中的换行符。在处理之前,您是否尝试将字符串折叠为一行?
答案 1 :(得分:0)
在不同的服务器上配置magic_quotes_gpc()的方式有何不同(phpinfo();可以告诉你)?只有在那里,才需要stripslashes(),如果不是,它可能最终会破坏你的XML。