在XML标记
我有一个用PHP文件解析的XML文件。我必须包含许多需要CDATA才能正确解析的“特殊”字符。<![CDATA[]>在XML标记
有没有办法告诉我的PHP文件读取所有的标签,就好像有一个块在乞讨和标签?
截至目前为每个XML标签创建我必须把CDATA块:
<tag><![CDATA[blah.......]]></tag>
有没有一种方法来设置它,我没有为艾薇每次写CDATA标签在我的XML?
CDATA是一个坏主意!它有很多问题。您应该做什么,而不是每个值使用htmlspecialchars()
。
好的..保持你的降薪!以下是CDATA的一些问题。
首先,简单的一点:你不能逃避]]>
序列。这可能看起来不是什么大问题,但如果你选择了'转义字符序列'的任何方法,那么你应该选择一个可以让每一个序列易于理解的方法。
现在对于大的一个:CDATA经常被用作hack来将Latin1数据注入到UTF-8文档中。人们认为,我在XML中有一个转义问题,所以我将使用CDATA作为解决方法。
在CDATA 中允许任何字符序列,并且该块中的XML文档的指定字符编码不再相关。然而,任何类型的文本实际上都有一个字符编码,而不是通过收敛编码(你应该做什么),而是通过将其包装在CDATA中来“破解”它。
对于编码二进制数据也不是一种可行的方法,因为仍然不允许控制字符。
所以,CDATA的意思是'这里是龙',这里有字节不是在指定的编码,我可以告诉你没有控制字符。
对于消费者来说,这是一个坏主意,因为所有有关字符编码的假设现在都消失了。
这里有一些链接:
你还没有告诉我们具体你指的是什么“特殊字符”,但我假设你的意思是某种重音字符,或非拉丁字母中的字符,等?
在大多数情况下,可以通过使用UTF-8字符集输出文档来解决问题。
在其余的情况下,它可以通过使用XML实体来解决 - 例如 
。
这两个都比使用CDATA更好的解决方案。
如果您控制XML的创建,那么您肯定可以逃避实体以避免使用CDATA。如果您使用的是像SimpleXML这样的东西,那么您可以随时扩展它,并将它视为包含在CDATA中的所有数据,而不是真的如此,但这看起来更麻烦而不值得。 – 2012-08-10 19:56:43