我有一个用PHP文件解析的XML文件。我必须包含许多需要CDATA的“特殊”字符才能正确解析。
有没有办法告诉我的PHP文件读取所有标签,好像在乞讨和标签上有一个块?
截至目前,对于每个XML标记,create i必须放置一个CDATA块:
<tag><![CDATA[blah.......]]></tag>
有没有办法设置它,我不必每次为我的XML中的evey标签写CDATA?
答案 0 :(得分:2)
htmlspecialchars()
。
好吧..抓住你的downvotes!以下是CDATA的一些问题。
首先,简单的一个:你无法逃避]]>
序列。这可能看起来不是什么大不了的事,但如果你选择任何“转义字符序列”的方法,你真的应该选择一个可以逃避每一个序列的方法。
现在对于重要人物:CDATA通常被用作将Latin1数据注入UTF-8文档的黑客攻击。人们认为,我在XML中有一个逃避问题,因此我将使用CDATA作为解决方法。
在CDATA中允许任何字符序列,并且此块中不再指定XML文档的指定字符编码。但是,任何类型的文本实际上都有字符编码,而不是转换编码(你应该做什么),你可以通过将它包装在CDATA中来“破解”。
这也不是编码二进制数据的可行方法,因为仍然不允许使用控制字符。
所以,CDATA有点暗示'这里是龙',这里的字节不是指定的编码,我只能告诉你没有控制字符。
这对消费者来说是一个坏主意,因为关于字符编码的所有假设现在都已消失。
以下是一些链接:
答案 1 :(得分:2)
你没有具体告诉我们你所指的“特殊字符”,但我假设你的意思是某种重音字符,或非拉丁字母中的字符等?
在大多数情况下,可以通过使用UTF-8字符集输出文档来解决问题。
在其余情况下,可以使用XML实体解决 - 例如 
。
这两种解决方案都比使用CDATA更好。