我們有一個腳本,用於解析來自用戶生成的源的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