2010-08-12 90 views
1

XML屬性我有一些字符串,在我的數據庫是有效的,但是當我將它們包含在一個UTF-8 XML輸出的屬性,他們給我下面的錯誤:格式化字符串在PHP

XML Parsing Error: not well-formed

我當前代碼(簡體):

header('Content-Type: text/xml'); 
echo '<?xml version="1.0" encoding="UTF-8" standalone="yes"?>'; 
echo '<root attribute="' . htmlentities($string_from_hell) . '">'; 

在將這些字符串包含在XML屬性中之前,我應該如何格式化這些字符串?

$string_from_hell的可能值:î„œ(不知道這是否會正確顯示)

+0

我不會在這裏使用「消毒」一詞。 「格式化」對我來說似乎更合適。 – 2010-08-12 11:54:35

+0

@Col。彈片你是對的。編輯。 – hpique 2010-08-12 12:02:47

回答

6

嘗試

htmlspecialchars($string_from_hell, ENT_QUOTES, "UTF-8") 

htmlentities不會做,因爲這將創建一個無法識別的HTML實體在XML中,只有HTML。您還應該指定字符集,因爲默認值不是UTF-8,而是ISO-8859-1。

您還錯過了屬性值周圍的引號(")。

還有更好的方法來創建處理轉義的XML文件。見例如XMLWriter

+0

我認爲真正的答案應該是使用適當的DOM API來構造XML而不是字符串連接。據我所知,OP的代碼忽略了屬性值附近的引號。 – Joey 2010-08-12 11:45:21

+0

@Johan你是對的,我錯過了報價。至於DOM API,我認爲這對XML構建來說是不必要的複雜(和低效),除非您之後需要完整的DOM樹。 – Artefacto 2010-08-12 11:49:43

+0

不知道這些API在PHP中的外觀。但是類似SAX的東西可能也足夠了(XMLWriter似乎是這樣)。我在XML中沒有那麼做,所以請原諒: - ) – Joey 2010-08-12 12:02:20