Php 使用$\u POST时,简单的\u xml\u字符串不起作用

Php 使用$\u POST时,简单的\u xml\u字符串不起作用,php,simplexml,Php,Simplexml,我需要一些帮助来弄清楚为什么不能将$\u POST['status']与simplexml\u load\u字符串一起使用 我将一些数据发布到一个php页面,然后在$u POST['status']中读取。然后,需要将$\u POST['status']中的xml读入php的simplexml\u load\u字符串,以便将xml解析为对象 如果我硬编码simplexml\u load\u string(),如下所示: $xml = simplexml_load_string('<?xml

我需要一些帮助来弄清楚为什么不能将$\u POST['status']与simplexml\u load\u字符串一起使用

我将一些数据发布到一个php页面,然后在$u POST['status']中读取。然后,需要将$\u POST['status']中的xml读入php的simplexml\u load\u字符串,以便将xml解析为对象

如果我硬编码simplexml\u load\u string(),如下所示:

$xml = simplexml_load_string('<?xml version="1.0"?>
                                <BackgroundReports userId="" password="" databaseset="">
                                  <BackgroundReportPackage>
                                    <ReferenceId>1|9</ReferenceId>
                                    <OrderId>107284</OrderId>
                                    <ScreeningStatus>
                                      <OrderStatus flag="FALSE">x:partial</OrderStatus>
                                    </ScreeningStatus>
                                    <Screenings>
                                      <Screening type="credit">
                                        <ScreeningResults type="result" mediaType="html" resultType="report">
                                          <InternetWebAddress><![CDATA[https://somewhere.com]]></InternetWebAddress> 
                                        </ScreeningResults>
                                      </Screening>
                                    </Screenings>
                                  </BackgroundReportPackage>
                                </BackgroundReports>');
但是,如果我像下面这样使用$\u POST['status']($\u POST['status'])而不是硬编码,则simplexml\u加载\u字符串不起作用。我知道$\u POST['status']具有所有相同的xml…我将其转储,它与我将其硬编码为简单的\u xml\u字符串的参数时完全相同

现在,当我尝试使用$\u POST['status']时,输出变成这样:

XML

bool(false)

我需要弄清楚如何在$_POST['status']中使用它,因为附属公司只会发回我的php页面。

也许您的主机上启用了神奇的引号。您可以制作一个简单的测试表单并发布查看

<?php
if($_SERVER['REQUEST_METHOD']=='POST'){
    if(get_magic_quotes_gpc()) {
        echo 'Magic quotes enabled, so GET,POST,REQUEST,COOKIE Strings are escaped';
        $status = stripslashes($_POST['status']);
    }else{
        $status = $_POST['status'];
    }

    print_r(simplexml_load_string($status));
}else{
?>
<h1>Test XML POST</h1>
<form method="POST" action="">
  <p><textarea rows="9" name="status" cols="36"></textarea></p>
  <p><input type="submit" value="Submit"></p>
</form>
<?php } ?>

测试XML POST


还添加了
错误报告(E_ALL)不会受伤。

感谢所有帮助我的人。这是我发现的。当我“发布”时,xml中有一行额外的内容,如下所示

"

<?xml version="1.0"?>bla bla
"
”
布拉布拉
"
当我像这样删除空行时,它都起作用了。< /P>
"<?xml version="1.0"?>bla bla
"
“bla bla
"

简单回答:
$\u POST['status']不一样。找出原因,这是最难的部分,我们不能从这里开始,尝试
var_dump
而不是回显它。我var_dump…我比较了var_dump的输出,并将其直接粘贴到代码中,因此它是硬编码的…它可以工作…但问题是我不能硬编码它…我需要从post变量中获取它…但这仍然不起作用。你是从页面的源代码复制/粘贴的,还是仅仅从在浏览器中输出?您是否在网页上执行
var\u dump
?然后做
var_dump(htmlentities($_POST['status']),否则浏览器将把XML解释为HTML。-了解该函数的返回值。FALSE表示加载的字符串不是有效的XML。就是这么简单。
"<?xml version="1.0"?>bla bla
"