2009-12-17 49 views
2

我正在使用PHP SimpleXML方式處理服務器上的XML文件。我只需要閱讀XML的內容(我不需要修改它),所以我堅持簡單易用的SimpleXML。但是,SimpleXML在讀取某個XML文件時遇到問題,因爲它有一些非常奇怪的字符。我收到以下錯誤:如何從XML文件中刪除非法字符?

Warning: simplexml_load_file() [function.simplexml-load-file]: data/data.xml:348: parser error : PCDATA invalid Char value 3 in C:\xampp\htdocs\VMP\xintel\analyzer.php on line 54 

Warning: simplexml_load_file() [function.simplexml-load-file]: Jardin al fte. Hall de recepcion, amplio living comedor. ocina comedor diario c in C:\xampp\htdocs\VMP\xintel\analyzer.php on line 54 

我不知道什麼進入XML文件控制,所以我不能被添加到文件阻止這些字符。另外,我不知道如何解決這個問題。該文件應該用utf-8編碼。所以我嘗試了從UTF-8到ISO-8859-1的解碼,反過來也沒有發生。

有人可以幫我嗎?我應該嘗試更改編碼嗎?我應該嘗試刪除這些字符嗎?什麼?

編輯:stangre人物都是框繪製字符(見:http://en.wikipedia.org/wiki/Box-drawing_characters

+2

把他們關進監獄! :V – Sneakyness

+1

如果文件包含非法的XML字符,那麼它不是XML文件,並且使用XML解析器不會對您有所幫助。 – skaffman

+0

嗯,我可以看到非法字符崩潰的XML解析器。 – VinkoCM

回答

5

我有一個從不受信任來源,其中有許多送我未編碼與符號接收XML的應用程序。爲了解決這個問題,我有一箇中間過濾器,它執行一個單獨的線性過濾,並在必要時去除/編碼字符。我不知道這對你是否可行,但我認爲這是一個非常合理的解決方案。

+0

好吧,我明白你在說什麼。但我不知道該怎麼做。您的應用程序是否更改編碼或者是否實際上用字符編碼替換了有問題的字符? – VinkoCM

+0

對不起,當我說「編碼」時,我並不是指charset。例如,在原始&符號的情況下,它將被替換爲& - 然後,您需要確保此&符號不是有效編碼的一部分,或者在處理完成時執行解碼傳遞。 – danben

+0

我認爲這是我會做的。最好的辦法是對整個xml文件進行重新編碼,以便將來腳本在遇到我無法檢查的字符時不會崩潰。 – VinkoCM

0

正常情況下,XML文件的所有字符都解釋,除非他們是爲一個CDATA部分=>link text

如果不是這樣你的XML是無效的。

+2

問題是如何處理這種無效的XML文件,當它不在您的控制之下時。 – ceejayoz

+0

我可以肯定地說,xml中的所有文本都放在CDATA塊中。所以所有這些字符都可以在CDATA中找到。 – VinkoCM

+0

你有樣本的XML文件嗎? – Patrick

2

也許你可以通過Tidy傳遞輸入,使其格式良好。在將文件提供給SimpleXML之前,需要執行一個簡單的預處理步驟。

例如,tidy::repairFile看起來很有希望。