XML в переменной _POST не преобразуется в XML при использовании PHP simplexml_load_string

#php #xml #simplexml

#php #xml #simplexml

Вопрос:

У меня есть этот PHP-скрипт, который получает переменную от этого нашего партнера. В переменной находится строка XML. При обработке файла он продолжает выдавать ошибки, подобные этой :

Предупреждение: SimpleXMLElement::__construct() : Entity: строка 19: ошибка синтаксического анализатора: Преждевременный конец данных в строке 19 описания тега в … затем указывается путь к скрипту.

Вот пример передаваемых данных :

 xml=<Posting>
<description><![CDATA[<p>this is a test posting.</p>

Here is some more of the test.]]></description>
</Posting>
  

Я настроил тестовый файл, который содержал текстовую область с тем же кодом, что показан выше, и с именем xml. Когда я отправляю его, скрипт работает нормально и завершается так, как должен. Журнал партнера начинается с «HTTP raw request is POST». Не уверен, что это как-то отличается, но чем больше деталей, тем лучше, я полагаю. Я также пробовал это на отдельных серверах, но все мои тесты работают, когда я отправляю данные, но не когда их отправляет партнер.

Вот как я собираю данные :

 if ($_POST['xml']) {
    $xmlstr = stripslashes($_POST['xml']);
    $xml = simplexml_load_string($xmlstr, 'SimpleXMLElement', LIBXML_NOCDATA);
}
  

Ответ №1:

Я только предполагаю, но, возможно, проблема в новых строках в ваших данных. Вы пытались свернуть строку в одну строку перед ее обработкой?

Комментарии:

1. Я могу попробовать это, но как это объяснит, что мои тесты работают каждый раз?

Ответ №2:

Есть ли разница в том, как magic_quotes_gpc() настроен на разных ваших серверах (phpinfo(); могу вам сказать)? stripslashes() должна требоваться только в том случае, если она есть, если ее нет, это может привести к нарушению вашего XML.

Комментарии:

1. Это было добавлено, потому что, когда партнер отправлял данные, перед всеми кавычками стояли косые черты.