XML Data Cleanup Before Calling SimpleXML(调用SimpleXML之前的XML数据清理)
本文介绍了调用SimpleXML之前的XML数据清理的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
这应该很简单,但我一直回避这一点。我们有一个用PHP编写的Web服务,它解析作为POST传入的XML有效负载,因此该XML有效负载包含在$_POST变量中。
该服务找到看起来像是具有XML的POST变量,然后使用implexml_LOAD_STRING加载它。似乎只要数据中有引号,如<;Element>;这就是"测试"<;/Element>;或
<;BuyerItemDesc&>客户序列号<;/BuyerItemDesc&>
加载失败。
启用MAGIC_QUOTES_GPC
MAGIC_QUOTES_RUNTIME OFF OFF
但这个方法似乎不能解决这个问题:
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中查找XML 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行数据过早结束
标签项目第76行数据过早结束
标签项目第75行中的数据过早结束
标记PODetail行74中的数据过早结束
标记NAMM_PO行2中的数据过早结束
更新 这是由XML元素中未经清理的数据引起的。为了纠正这个错误,我添加了htmlSpecial alchars():
$payload = htmlspecialchars(stripslashes(trim($postXMLPayload)));
推荐答案
这是由xml元素中未经清理的数据引起的。为了纠正这个错误,我添加了htmlSpecial alchars():
$payload = htmlspecialchars(stripslashes(trim($postXMLPayload)));
这篇关于调用SimpleXML之前的XML数据清理的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持编程学习网!
沃梦达教程
本文标题为:调用SimpleXML之前的XML数据清理
基础教程推荐
猜你喜欢
- 通过 PHP SoapClient 请求发送原始 XML 2021-01-01
- XAMPP 服务器不加载 CSS 文件 2022-01-01
- 在 Woocommerce 中根据运输方式和付款方式添加费用 2021-01-01
- Libpuzzle 索引数百万张图片? 2022-01-01
- 超薄框架REST服务两次获得输出 2022-01-01
- WooCommerce 中选定产品类别的自定义产品价格后缀 2021-01-01
- 在多维数组中查找最大值 2021-01-01
- 如何在 PHP 中的请求之间持久化对象 2022-01-01
- 在 PHP 中强制下载文件 - 在 Joomla 框架内 2022-01-01
- mysqli_insert_id 是否有可能在高流量应用程序中返回 2021-01-01