我们有一个脚本,用于解析来自用户生成的源的XML源,这些源中不时地包含具有特殊字符的格式错误的条目。使用PHP的XMLReader,DOM和SimpleXML强制UTF8格式
虽然我通常只是在线上运行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的::扩展():foo.xml:29081:分析器错误:输入是 不正确UTF-8,编码指示!字节数:0×05 0×20 0x2D 0x35
严重性:警告
消息:XMLReader的::扩展():一个错误发生 同时扩大
文件名:控制器/ feeds.php
行号:106
消息:传递给DOM文档参数1 :: importNode()必须的DOMNode的 例如,布尔给出
文件名: 控制器/feeds.php
行号:106
做这些文件* *宣布,他们在UTF-8编码会当他们其实并没有,或者你只是不关心他们是在和什么编码*假设他们用UTF-8编码?你有没有打破你的解析器的文档样本? – deceze 2012-04-17 07:47:20
大多数声明UTF-8,但不是全部。不幸的是,我处理文件的可变性给了发送数据源的类型。 – 2012-04-18 16:37:58