使用PHP的simplexml_load_string时,_POST变量中的XML不会转换为XML

时间:2011-04-05 21:28:10

标签: php xml simplexml

我有这个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);
}

2 个答案:

答案 0 :(得分:0)

我只是猜测,但问题可能在于数据中的换行符。在处理之前,您是否尝试将字符串折叠为一行?

答案 1 :(得分:0)

在不同的服务器上配置magic_quotes_gpc()的方式有何不同(phpinfo();可以告诉你)?只有在那里,才需要stripslashes(),如果不是,它可能最终会破坏你的XML。