Очистка данных XML перед вызовом SimpleXML

Это должно быть просто, но это ускользало от меня. У нас есть веб-сервис, написанный на PHP, который анализирует полезную нагрузку XML, входящую в состав POST, поэтому полезная нагрузка XML содержится в переменной $ _POST.

Служба находит POST var, который похож на XML, а затем использует simplexml_load_string для его загрузки. Кажется, что всякий раз, когда в данных, подобных <element>, есть кавычки, это «тест» </ element> или этот
<BuyerItemDesc> Серийный номер клиента </ BuyerItemDesc> сбой загрузки.

Мой вопрос в том, как лучше всего дезинфицировать данные в POST перед вызовом simplexml_load_string ()? Я знаю, что PHP делает некоторое ускорение кавычек, найденных в $ _POST vars:

magic_quotes_gpc Вкл. On
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> - <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> - <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> 

Ищите XML в $ _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
Преждевременный конец данных в теге Позиция строка 76
Преждевременный конец данных в тегах. Строка 75
Преждевременный конец данных в теге PODetail line 74
Преждевременный конец данных в теге NAMM_PO line 2

ОБНОВЛЕНИЕ Это было вызвано неанитированными данными в элементе XML. Чтобы исправить это, я добавил htmlspecialchars ():

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