2013-04-03 39 views
0

我使用DOMDocument類在PHP中生成了一個XML文件,數據是從MySQL數據庫中抓取的。很多數據都包含HTML標記,但我已將它全部包裝在CDATA部分中。PHP生成的XML文件中的編碼錯誤

該文件起初有很多編碼錯誤,但在將其放入文件之前通過utf8_encode()運行所有內容似乎已修復除一個之外的所有錯誤。

以下是錯誤我現在所擁有的:

error on line 5113 at column 450: Input is not proper UTF-8, indicate encoding ! 
    Bytes: 0x14 0x31 0x30 0x30 

我發現一些職位在這裏的類似錯誤,但都沒有解決我的問題,或者使用utf_encode建議()。下面是這似乎是觸發錯誤的部分:

...quiet portable package. ]]></Summary><Features><![CDATA[The EF4500iSE was designed for maximum fuel... 

的錯誤似乎是CDATA [和之間,雖然我看不到有任何之間的字符和那件一樣每隔CDATA在文件中阻止。如果我刪除整個Features元素及其內容,則文件加載正常。

這裏是鏈接到文件:http://test.hhdev.hothousemarketing.com/inventory.xml

+2

在那個特定的CDATA標籤,似乎有「轉」和「1000」之間的性格怪異。你嘗試過'utf8_encode'嗎? – 2013-04-03 18:56:53

+0

是的,我所做的一切都是通過utf8_encode()第一個 – user192618 2013-04-03 18:59:21

+0

是刪除你提到的字符修復它,現在可以在PHP中生成文件時擺脫它? – user192618 2013-04-03 19:04:30

回答

0

的問題最終被CDATA標籤中存在非ASCII字符,如問題的評論中指出科林。

我在匆忙解決這個,所以我只是用蠻力方法,並通過正則表達式替換除了函數utf8_encode()跑了一切,我用: $輸出=的preg_replace('/ [^(\ X20 - \ x7F)] * /','',$ output);我發現這裏:http://www.stemkoski.com/php-remove-non-ascii-characters-from-a-string/

感謝科林和弗朗西斯的貢獻。

0

某些字符在XML中是不允許的,即使在CDATA節中也是如此,即使是實體編碼。

您可能能夠使用這個在UTF-8字符串(未經測試):

$xml_legal_chars = preg_replace('/[\x{00}-\x{08}\x{0B}\x{0C}\x{0E}-\x{1F}\x{D800}-\x{DFFF}\x{FFFE}\x{FFFF}]/u', '', $utf8string);