2010-08-12 94 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