Мне нужно загрузить XML-документ в PHP, полученный из внешнего источника. XML не объявляет свою кодировку и содержит недопустимые символы, такие как &
. Если я пытаюсь загрузить XML-документ непосредственно в браузере, я получаю сообщения об ошибках типа «Недопустимый символ в текстовом содержимом», а также при загрузке файла в PHP я получаю множество предупреждений, таких как: xmlParseEntityRef: no name in Entity
и Input is not proper UTF-8, indicate encoding ! Bytes: 0x9C 0x31 0x21 0x3C
.
Понятно, что XML не правильно сформирован и содержит недопустимые символы, которые должны быть преобразованы в объекты XML.
Это потому, что канал XML состоит из данных, предоставленных множеством других пользователей, и, очевидно, он не проверяется и не переформатируется до того, как я его получу.
Я разговаривал с поставщиком канала XML, и они говорят, что пытаются заставить поставщиков контента разобраться с этим, но это кажется глупым, поскольку они должны сначала проверить ввод.
Мне в основном нужно исправить XML, исправляя все ошибки кодирования и преобразовывая любые недопустимые символы в сущности XML, чтобы XML загружал проблему при использовании функций PHP DOMDocument.
Мой код в настоящее время выглядит так:
$feedURL = '3704017_14022010_050004.xml';
$dom = new DOMDocument();
$dom->load($feedURL);
Пример XML-файла, показывающего проблему кодировки (нажмите для загрузки): feed.xml
Пример XML, который содержит символы, которые не были преобразованы в сущности XML:
<?xml version="1.0"?>
<feed>
<RECORD>
<ID>117387</ID>
<ADVERTISERNAME>Test</ADVERTISERNAME>
<AID>10544740</AID>
<NAME>This & This</NAME>
<DESCRIPTION>For one day only this is > than this.</DESCRIPTION>
</RECORD>
</feed>