SimpleXML的失敗,出現以下錯誤信息:如何處理與SimpleXML的無效的Unicode
simplexml_load_file(): fooo.xml:299108: parser error : Char 0xFFFE out of allowed range
從我的理解,該投訴是關於一個無效的Unicode字符。 299108行沒有「FFFE」,但它包含「EFBFBE」。
有沒有辦法在simplexml中處理這種類型的錯誤?
SimpleXML的失敗,出現以下錯誤信息:如何處理與SimpleXML的無效的Unicode
simplexml_load_file(): fooo.xml:299108: parser error : Char 0xFFFE out of allowed range
從我的理解,該投訴是關於一個無效的Unicode字符。 299108行沒有「FFFE」,但它包含「EFBFBE」。
有沒有辦法在simplexml中處理這種類型的錯誤?
我遇到了很多傳入的用戶數據,我研究了很多方法來解決它。有許多方法可以將輸入數據正確地編碼爲UTF-8,而不需要經常導致這些問題的高階(或其他)unicode值。
但是,消毒解決方案的問題在於它們會更改數據,如果您只想成爲中間人,您仍然希望輸出包含這些值。唯一的非破壞性的方式,我可以拿出來獲得一個SimpleXMLElement可靠不會失敗,就是要做到這一點無可否認雙工作的解決方案:
libxml_use_internal_errors(true);
$dom = new DOMDocument("1.0", "UTF-8");
$dom->strictErrorChecking = false;
$dom->validateOnParse = false;
$dom->recover = true;
$dom->loadXML($xmlData);
$xml = simplexml_import_dom($dom);
libxml_clear_errors();
libxml_use_internal_errors(false);
的訣竅是在PHP的文件中尋找DOM文檔的屬性,注意那些讓你設置解析行爲的額外變量。這種方法對我來說毫無例外,在所有用於使SimpleXMLElement失敗的xml輸入中都會出現字符範圍問題。
我唯一的猜測是爲什麼它的工作原理是SimpleXMLElement在初始化時執行嚴格的檢查,但在從現有的DOMDocument進行初始化時沒有執行。
該方法允許後續的asXML()調用,而不會失敗。
我有一個忽略無效字符的函數。我可以張貼給你,如果你需要它...但它有點冗長的一個..... – Karthik
http://stackoverflow.com/questions/3466035/how-to-skip-invalid-characters-in-xml-文件使用PHP – Mob