XMLReader编码错误

Mic*_*ves 1 php encoding xmlreader

我有一个PHP脚本,它试图解析一个巨大的XML文件.为此,我正在使用XMLReader库.在解析过程中,我有这个编码错误:

输入不正确UTF-8,表示编码!字节:0xA0 0x32 0x36 0x30

我想知道它们是否是一种跳过带有坏字符的记录的方法.

谢谢!

Ste*_*rig 8

首先,确保您的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); 
Run Code Online (Sandbox Code Playgroud)

如果你使用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();
Run Code Online (Sandbox Code Playgroud)

我实际上不知道前两个解决方法是否实际允许XMLReader在出现错误时继续读取,或者它们是否仅抑制错误输出.但值得一试.


回应评论:

libXML定义XML_PARSE_RECOVER(1)但是ext/libxml不会将此常量公开为PHP常量.也许可以将整数值传递1$options参数.

$xml = new XMLReader(); 
$xml->open('myxml.xml', null, LIBXML_NOERROR | LIBXML_NOWARNING | 1); 
Run Code Online (Sandbox Code Playgroud)