1

这应该很简单,但它一直在逃避我。我们有一个用 PHP 编写的 Web 服务,它解析作为 POST 传入的 XML 有效负载,因此 XML 有效负载包含在 $_POST 变量中。

该服务找到看起来像具有 XML 的 POST var,然后使用 simplexml_load_string 加载它。似乎只要数据中有引号,例如<element>this is a "test"</element>或此
<BuyerItemDesc>Customer's Serial Number</BuyerItemDesc> ,加载就会失败。

我的问题是在调用 simplexml_load_string() 之前清理 POST 中的数据的最佳方法是什么?我知道 PHP 正在对 $_POST vars 中的引号进行转义:

magic_quotes_gpc 开 开
magic_quotes_runtime 关 关

但是这种方法似乎并不能解决它:

trim(stripslashes($xmlFromPost));

问题中的 XML 片段

<Item>
<POLineNbr>1</POLineNbr>
<BuyerItemId>CDL-BM01</BuyerItemId>
<BuyerItemDesc>Biscuit Miller's, "Blues with a..."</BuyerItemDesc>
<Qty>1</Qty>
<QtyUOM>EA</QtyUOM>
<UCValue>0.00</UCValue>
<UCCurrencyCode>USD</UCCurrencyCode>
<SupplierItemId></SupplierItemId>
<BarCodeId>884502780246</BarCodeId>
<BarCodeType>GTIN-12</BarCodeType>

在 $_POST if(isset($_POST)){

foreach($_POST as $k=>$v){

    if(preg_match('/^\<\?xml/',trim($v))){

        $postXMLPayload = trim(stripslashes($v));
        break;
    }

  }
}

libxml_use_internal_errors(true);
$xml = simplexml_load_string($postXMLPayload);

错误
标签 BuyerItemDesc 行 79中 的
数据
过早
结束

更新 这是由 XML 元素中的未经处理的数据引起的。为了纠正这个问题,我添加了 htmlspecialchars():

$payload = htmlspecialchars(stripslashes(trim($postXMLPayload)));
4

1 回答 1

0

这是由 XML 元素中未经处理的数据引起的。为了纠正这个问题,我添加了 htmlspecialchars():

$payload = htmlspecialchars(stripslashes(trim($postXMLPayload)));
于 2013-01-09T19:33:20.227 回答