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