Это должно быть просто, но это ускользало от меня. Нам написали веб-сервис в PHP, который разбирает полезный груз XML, который входит как ПОЧТА, таким образом, полезный груз xml содержится в $ _POST переменная.
The service finds the POST var that looks like it has xml and then uses simplexml_load_string to load it up. It seems like whenever there are quotes in the data like this is a "test" or this
Customer's Serial Number
the load fails.
Мой вопрос - то, что лучший способ состоит в том, чтобы санировать данные на ПОЧТЕ прежде, чем назвать simplexml_load_string ()? Я знаю, что PHP делает некоторую возможность избежать кавычек, найденных в $ _POST Вар:
magic_quotes_gpc On On
magic_quotes_runtime Off Off
Но этот подход, кажется, не, решают его:
trim(stripslashes($xmlFromPost));
Отрывок от XML, рассматриваемого
-
1
CDL-BM01
Biscuit Miller's, "Blues with a..."
1
EA
0.00
USD
884502780246
GTIN-12
Look for xml in $_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);
Errors
Premature end of data in tag BuyerItemDesc line 79
Premature end of data in tag Item line 76
Premature end of data in tag Items line 75
Premature end of data in tag PODetail line 74
Premature end of data in tag NAMM_PO line 2
UPDATE
This was caused by unsanitized data in the xml element. To correct this, I added htmlspecialchars():
$payload = htmlspecialchars(stripslashes(trim($postXMLPayload)));