为什么即使在CDATA部分也不允许使用null char?

时间:2009-02-02 11:42:45

标签: xml null cdata

XML,为什么即使在CDATA部分也不允许使用null char?

似乎在那里终止文件。

任何解决方案? BASE64?

3 个答案:

答案 0 :(得分:4)

因为它不是valid XML character,即它应该产生一个解析错误。这可能是由于历史原因(空终止字符串)以及XML的纯文本性质:不鼓励任何具有Unicode功能的编辑器可能会阻塞...

答案 1 :(得分:2)

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

Why are "control" characters illegal in XML 1.0?

答案 2 :(得分:1)

它不应该'终止文件',但它应该生成格式良好的错误。这是不允许的,因为世界上很多人仍在使用以空值终止的字符串处理,所以允许\ 0可能会在处理链的某个未指定点上造成麻烦。

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

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

  

的Base64?

是。但是如果你正在处理大部分二进制文件,那么用XML封装它可能不是一个合理的选择。