2012-04-10 56 views
3

我試圖生成一個XML文件,它大約是23到30 MB,當我打開它與Firefox我收到如何從文檔中刪除無效的XML本地字符用PHP

XML Parsing Error: not well-formed 
Location: file:///Users/User/Downloads/export(2).xml 
Line Number 137725, Column 1343: 

之後,我嘗試驗證與XML Nanny記錄和我收到以下錯誤:

Invalid Character (Unicode: 0xB) 

在若干(13)線:137725,137738,137751,137764,137777,137790,137803,137816,146834,189949,193444,193457,193470

我試過幾個「解決方案」,其中包括:

  1. 正則表達式:

    preg_replace(
        '/[^\x9\xA\xD\x20-\x{D7FF}\x{E000}-\x{FFFD}\x{10000}-\x{10FFFF}]+/' 
        , ' ', $data->Description); 
    

    這裏的問題是,我'不是很確定,這是有效的正則表達式,因爲我收到內部服務器錯誤,因爲在我們的Apache中啓用了mod安全性。

  2. 我想救我的文件爲UTF-8 BOM,但是那是絕望的嘗試

  3. 我試圖用「UTF-8 //忽略」,但這個沒使用的iconv 't幫助

  4. 我試圖使用字符替換字符,但這並不適用於我的文件,因爲我有230k行..即使我替換特定的標記,其中我有這個問題我在php中觸發max_execution_time指令,我的腳本被終止。

現在我的解決辦法是清除的手動這種無效字符數據庫中的記錄,但現在這是適當和正確的解決我的問題,因爲在未來的這個腳本將被用於自動化這個出口和手動編輯ISN選項或話題。

+0

感謝您的糾正! – h4cky 2012-04-10 20:20:50

回答

2

我倒是首先棒由XML保姆給出的信息:

Invalid Character (Unicode: 0xB) (several lines) 

0xB是從控制字符範圍內的字符,但只有非常有限的控制字符被允許一個XML文件內。我建議你開始用數字實體替換它們,然後再試一次:

$xml = strtr($xml, array("\x0B" => "")); 

Firefox可能接受這些。

+0

感謝您解答我的問題。現在一切都很好。 – h4cky 2012-04-10 20:27:46

1

我曾經遇到過類似的問題。我所做的是使用base64encode在通過XML發送數據之前加密數據,然後在接收數據後對其進行解碼。告訴我這是否適合你。或者如果我不明白你的問題?

相關問題