簡體   English   中英

PHP生成的XML文件中的編碼錯誤

[英]Encoding Error in PHP Generated XML File

我已經使用DOMDocument類在PHP中生成了一個XML文件,該數據是從MySQL數據庫中獲取的。 許多數據包含HTML標記,但是我已經將所有數據都包含在CDATA部分中。

最初,該文件存在很多編碼錯誤,但是在將其放入文件之前,通過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 [和The之間,盡管我看不到它們之間的任何字符,並且該字符與文件中的所有其他CDATA塊相同。 如果刪除整個Feature元素及其內容,則文件加載正常。

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

正如Colin在問題注釋中所指出的,問題最終是CDATA標記中存在一個非ASCII字符。

我急於解決這個問題,所以我只使用了蠻力方法,並且除了utf8_encode()以外,還通過正則表達式替換來運行所有內容,我使用了:$ output = preg_replace('/ [^(\\ x20- \\ x7F)] * /','',$ output); 我在這里找到了: http : //www.stemkoski.com/php-remove-non-ascii-characters-from-a-string/

感謝Colin和Francis的貢獻。

有些字符甚至在CDATA節中甚至在實體編碼中都不允許在XML中使用。

您可能可以在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);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM