Прежде всего, убедитесь, что ваш XML-файл действительно в кодировке UTF-8. Если нет, укажите кодировку в качестве второго параметра для XMLReader::open()
.
Если ошибка кодирования вызвана реальной некорректной последовательностью байтов в документе UTF-8 и если вы используете PHP> 5.2.0, вы можете передать LIBXML_NOERROR
и / или (в зависимости от уровня ошибки) LIBXML_NOWARNING
в качестве битовой маски к третьему параметру XMLReader::open()
:
$xml = new XMLReader();
$xml->open('myxml.xml', null, LIBXML_NOERROR | LIBXML_NOWARNING);
Если вы используете PHP> 5.1.0, вы можете настроить обработку ошибок libXML
.
// enable user error handling
libxml_use_internal_errors(true);
/* ... do your XML processing ... */
$errors = libxml_get_errors();
foreach ($errors as $error) {
// handle errors here
}
libxml_clear_errors();
На самом деле я не знаю, позволяют ли предыдущие два обходных пути действительно XMLReader
продолжать чтение в случае ошибки или они только подавляют вывод ошибки. Но стоит попробовать.
Ответ на комментарий:
libXML
определяет XML_PARSE_RECOVER
(1), но ext / libxml не предоставляет эту константу как константу PHP. Возможно, можно передать целочисленное значение 1
параметру $options
.
$xml = new XMLReader();
$xml->open('myxml.xml', null, LIBXML_NOERROR | LIBXML_NOWARNING | 1);