#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. Это было добавлено, потому что, когда партнер отправлял данные, перед всеми кавычками стояли косые черты.