Прежде всего, убедитесь, что ваш 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);
person
Stefan Gehrig
schedule
04.05.2009