2012-05-02 19 views
1

好的,我希望有人可以提供幫助,因爲我一直無法找到解決方案。由於長的UTF字符,XML格式不正確

在數據庫,客戶管理導入或以其他方式從不同的字符添加字符的數據集,如:

<E2><80><99> 

我相信這是UTF-16。

由於該數據(從數據庫中拉取字符串,例如「description」字段並構建XML文件),我的腳本的XML輸出引發錯誤。

XML解析錯誤:沒有很好地形成 行數20,列50

這裏也有一些其他的16進制這是更長的時間,就像< 80> < 99>(只是舉個例子,即時通訊不知道這是一個實際字符)。

我怎樣才能讓我的XML文件中有效,並且或者縮減的字符集或得到它使用UTF-32,像這樣:

AddType "application/xml; charset=UTF-32" xml (in .htaccess file along with filesmatch .xml) 


    <?xml version='1.0' encoding='UTF-32' ?> (placed in head of xml file) 
+1

'0xe2 0x80 0x99'是'右單引號'(U + 2019)的UTF-8,我認爲你的問題在別處。你能向我們展示xml的前幾行嗎? –

+0

你在哪裏看到這些錯誤?你有一個示例URL?什麼是20號線?第50列是什麼? – hakre

+0

下面是一個例子: XML解析錯誤:沒有很好地形成 位置:http://xxxx/xml/hal-default.xml 行號20,柱50:\t \t \t 的Hangmans溪牧場是一個190(特殊字符就在這裏後, 「190」)英畝的牧場 通過一個十六進制編輯器看這個: 0001140 3931 B130 6120 7263 2065 6172 636e 2068 1 9 0 1 SP英畝SP牧場SP 這說明了什麼嗎? –

回答

0

不管它是什麼:UTF-8,-16或-32 - 如果您在輸出中選擇了其他編碼,則必須 - 如果不同 - 請首先對輸入進行重新編碼以便輸出。

你在你的問題中明確指出你不知道輸入編碼是什麼。由於編碼是元信息,因此您需要清楚地理解這一點。你需要正確地知道它來處理字符串。從你共享的內容看,它看起來像是UTF-8編碼的輸入。您應該驗證(How to detect malformed utf-8 string in PHP?)。

接下來的事情是,格式不一定意味着編碼問題(但它可以)。只要你不分享問題的根源(最好在文本表單with a hex-dump旁邊),對於我所說的當前信息,沒有太多的建議可以給出。

+0

下面是一個示例: XML解析錯誤:格式不正確 位置:http://x.x.x.x/xml/hal-default。XML 行數20,列50:\t \t \t 的Hangmans溪牧場是一個190(特殊字符就在這裏後,「190」)英畝的牧場 通過一個十六進制編輯器看這個: 0001140 3931 b130 6120 7263 2065 6172 636e 2068 1 9 0 1 sp acre sp ranch sp 這是否說明了什麼? –