【发布时间】:2012-04-27 11:49:44
【问题描述】:
我们有一个脚本可以解析来自用户生成的源的 XML 提要,这些提要不时包含格式不正确的带有特殊字符的条目。
虽然我通常只在线运行 utf8_encode(),但我不确定如何执行此操作,因为 DOM 正在逐步读取文件,并且在执行扩展命令时会引发错误。
由于 simple_xml 阻塞了代码,后续行也关闭了。
这是代码。
$z = new XMLReader;
$z->open($filename); $doc = new DOMDocument('1.0','UTF-8');
while ($z->read() && $z->name !== 'product');
while ($z->nodeType == XMLReader::ELEMENT AND $z->name === 'product'){
$producti = simplexml_import_dom($doc->importNode($z->expand(), true));
print_r($producti);
}
错误:
消息:XMLReader::expand(): foo.xml:29081: 解析器错误:输入是 不正确的UTF-8,表示编码!字节数:0x05 0x20 0x2D 0x35
严重性:警告
消息:XMLReader::expand():错误 展开时发生
文件名:controllers/feeds.php
行号:106
消息:传递给 DOMDocument::importNode() 的参数 1 必须是 DOMNode 实例,给定布尔值
文件名: controllers/feeds.php
行号:106
【问题讨论】:
-
这些文档是否声明它们是用 UTF-8 编码的,而实际上它们不是,或者你只是不关心它们是什么编码和 假设它们是用 UTF-8 编码的?您是否有破坏解析器的文档样本?
-
大多数声明 UTF-8,但不是全部。不幸的是,文件的可变性由我来处理,并给出发送数据的源类型。