在XML标签中

时间:2012-08-10 19:46:57

标签: php xml parsing xml-parsing cdata

我有一个用PHP文件解析的XML文件。我必须包含许多需要CDATA的“特殊”字符才能正确解析。

有没有办法告诉我的PHP文件读取所有标签,好像在乞讨和标签上有一个块?

截至目前,对于每个XML标记,create i必须放置一个CDATA块:

<tag><![CDATA[blah.......]]></tag>

有没有办法设置它,我不必每次为我的XML中的evey标签写CDATA?

2 个答案:

答案 0 :(得分:2)

CDATA是一个坏主意!这有很多问题。你应该做的是,每个值使用htmlspecialchars()

好吧..抓住你的downvotes!以下是CDATA的一些问题。

首先,简单的一个:你无法逃避]]>序列。这可能看起来不是什么大不了的事,但如果你选择任何“转义字符序列”的方法,你真的应该选择一个可以逃避每一个序列的方法。

现在对于重要人物:CDATA通常被用作将Latin1数据注入UTF-8文档的黑客攻击。人们认为,我在XML中有一个逃避问题,因此我将使用CDATA作为解决方法。

在CDATA中允许任何字符序列,并且此块中不再指定XML文档的指定字符编码。但是,任何类型的文本实际上都有字符编码,而不是转换编码(你应该做什么),你可以通过将它包装在CDATA中来“破解”。

这也不是编码二进制数据的可行方法,因为仍然不允许使用控制字符。

所以,CDATA有点暗示'这里是龙',这里的字节不是指定的编码,我只能告诉你没有控制字符。

这对消费者来说是一个坏主意,因为关于字符编码的所有假设现在都已消失。

以下是一些链接:

答案 1 :(得分:2)

你没有具体告诉我们你所指的“特殊字符”,但我假设你的意思是某种重音字符,或非拉丁字母中的字符等?

在大多数情况下,可以通过使用UTF-8字符集输出文档来解决问题。

在其余情况下,可以使用XML实体解决 - 例如&#160;

这两种解决方案都比使用CDATA更好。