-1

我需要一些帮助来弄清楚为什么我不能将 $_POST['status'] 与 simplexml_load_string 一起使用。

我将一些数据发布到 php 页面,然后在 $_POST['status'] 中读取。然后需要将位于 $_POST['status'] 中的 xml 读入 php 的 simplexml_load_string,以便我可以将 xml 解析为一个对象。

如果我像这样对 simplexml_load_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>');

并用 var_dump($xml) 转储它的输出是:

XML

object(SimpleXMLElement)#3 (2) {
  ["@attributes"]=>
  array(3) {
    ["userId"]=>
    string(0) ""
    ["password"]=>
    string(0) ""
    ["databaseset"]=>
    string(0) ""
  }
  ["BackgroundReportPackage"]=>
  object(SimpleXMLElement)#4 (4) {
    ["ReferenceId"]=>
    string(3) "1|9"
    ["OrderId"]=>
    string(6) "107284"
    ["ScreeningStatus"]=>
    object(SimpleXMLElement)#5 (1) {
      ["OrderStatus"]=>
      string(9) "x:partial"
    }
    ["Screenings"]=>
    object(SimpleXMLElement)#6 (1) {
      ["Screening"]=>
      object(SimpleXMLElement)#7 (2) {
        ["@attributes"]=>
        array(1) {
          ["type"]=>
          string(6) "credit"
        }
        ["ScreeningResults"]=>
        object(SimpleXMLElement)#8 (2) {
          ["@attributes"]=>
          array(3) {
            ["type"]=>
            string(6) "result"
            ["mediaType"]=>
            string(4) "html"
            ["resultType"]=>
            string(6) "report"
          }
          ["InternetWebAddress"]=>
          object(SimpleXMLElement)#9 (0) {
          }
        }
      }
    }
  }
}

但是,如果我像这样使用 $_POST['status']$xml = simplexml_load_string($_POST['status']);而不是硬编码,那么 simplexml_load_string 将不起作用。我知道 $_POST['status'] 具有所有相同的 xml...我将其转储出来,它与我将其硬编码为 simple_xml_string 的参数时完全相同。

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

XML

bool(false)

我需要弄清楚如何能够将其与 $_POST['status'] 一起使用,因为会员只会 POST 回我的 php 页面。

4

2 回答 2

0

也许您在主机上启用了魔术引号。你可以做一个简单的测试表格和POST来看看。

<?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 } ?>

也添加error_reporting(E_ALL);不会伤害。

于 2012-11-09T00:33:35.593 回答
0

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

"

<?xml version="1.0"?>bla bla
"

当我像这样删除空白行时,一切正常。

"<?xml version="1.0"?>bla bla
"
于 2012-11-09T16:06:29.303 回答