3

XML,为什么即使在 CDATA 部分中也不允许使用空字符?

它似乎在那里终止了文件。

有什么解决办法吗?Base64?

4

3 回答 3

4

因为它不是有效的 XML 字符,即它应该产生一个解析错误。这可能是由于历史原因(以空结尾的字符串)和 XML 的纯文本性质:不鼓励支持 Unicode 的编辑器阻塞的任何内容...

于 2009-02-02T11:59:19.100 回答
2

您可能会在上一个问题中找到答案:

为什么 XML 1.0 中的“控制”字符是非法的?

于 2009-02-02T11:57:47.620 回答
1

它不应该“终止文件”,但应该产生格式正确的错误。这是不允许的,因为世界上仍有很多地方仍在使用以空字符结尾的字符串处理,因此允许 \0 可能会在处理链中的某个未指定点造成麻烦。

这甚至可能是一个安全漏洞;过去有许多漏洞利用依赖于允许 \0 的系统接口以及将其作为终结者的系统接口。因此,最安全的做法就是禁止它。

其他控制字符可以转义为 &#...; XML 1.1 中其他地方的字符引用,但不在 CDATA 部分中。在 XML 1.0 中,根本无法获取控制字符。毕竟,它应该是一种基于文本的、人类可读的格式。

Base64?

是的。但是,如果您主要处理大块二进制文件,则将其封装在 XML 中可能不是一个合理的选择。

于 2009-02-02T12:40:11.573 回答