2

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

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

截至目前,对于每个 XML 标签,我必须创建一个 CDATA 块:

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

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

4

2 回答 2

2

CDATA 是个坏主意!它有很多问题。相反,您应该做的是使用htmlspecialchars()每个值。

好吧..保持你的反对票!以下是 CDATA 的一些问题。

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

现在来说大一点:CDATA 通常被用作将 Latin1 数据注入 UTF-8 文档的黑客手段。人们认为,我在 XML 中有一个转义问题,所以我将使用 CDATA 作为解决方法。

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

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

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

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

以下是一些链接:

于 2012-08-10T19:48:12.850 回答
2

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

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

在其余情况下,可以通过使用 XML 实体来解决——例如&#160;.

这两个都是比使用 CDATA 更​​好的解决方案。

于 2012-08-10T21:02:09.690 回答