2012-06-14 88 views
5

從用戶提交的文本中用PHP生成有效的XML的最佳實踐是什麼?電子商務銷售數據,包括&符號,尖括號,非ASCII字符,新行等等。使用戶輸入安全的XML

什麼函數,庫,regexes人們依賴?

+0

我目前使用CDATA和ヶ輛,過了重音Ø在萊昂引起trainwreck我刪除重音字符與strtr函數的效率()。事情是公司後臺人員討厭htmlentities()輸出,他們的Windows編碼器似乎無法爲他們解碼。 – jerrygarciuh

+0

聽起來你混合的字符編碼比CDATA本身有問題。一起使用htmlentities和CDATA並沒有多大意義。因此,不要瘋狂和廣泛猜測要殺死什麼,首先要找出問題所在。解決方案往往是微不足道的。那麼究竟有什麼不工作? – hakre

+0

那麼我們有什麼是使用Expression Engine的抽象存儲來創建電子商務商店的一些knuckleheads。表編碼被設置爲匹配EE。店主的後臺是Windows,另一方有一個可執行文件,該文件接受XML並導入Windows平臺上的Great Plains。我負責編寫接受來自可執行文件的調用以同步分銷商,商店產品以及分銷商和零售訂單的API。我不想在CDATA標籤中包裝每一個用戶輸入,但即使在我發現重音o問題時,也會吹起來。 – jerrygarciuh

回答

4
CDATA標籤和編碼數據

裹信息與htmlentities()

'<tag><![CDATA[' . htmlentities($theData) . ']]></tag>' 

或者使用DOM

$dom = new DOMDocument("1.0", "utf-8"); 

/* ... */ 

$dom->createCDATASection(htmlentities($theData)); 
+0

對不起,但答案看起來有點像你不知道CDATA的用途,以及有什麼功能可以做或不做。 – hakre

1

如果你想要二進制安全,那麼你需要使用額外的傳輸編碼。例如,您可以使用base64uuencode以XML塊內的二進制安全方式存儲數據。