-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)

アフィリエイトは私のphpページにのみPOSTするため、 $_POST['status'] でこれを使用できるようにする方法を理解する必要があります。

4

2 に答える 2

0

私を助けてくれたすべての人に感謝します。これが私が見つけたものです。私が「投稿」していたとき、このようなxmlに余分な行がありました

"

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

このように空白行を削除すると、すべて機能しました。

"<?xml version="1.0"?>bla bla
"
于 2012-11-09T16:06:29.303 に答える
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 に答える