【问题标题】:Why are null char disallowed even in CDATA sections?为什么即使在 CDATA 部分中也不允许使用空字符?
【发布时间】:2023-04-05 23:55:01
【问题描述】:

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

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

有什么解决办法吗? Base64?

【问题讨论】:

  • 好问题,除了base64(或一些分隔符)之外想不出任何东西。
  • 我很好奇,为什么要在 XML 中包含空值?看到 XML 中的二进制流让我吃惊。
  • @João:因为他想在旧版本的 Flash 中传输二进制数据,而不需要 base64 的开销 - 请参阅 stackoverflow.com/questions/502857/…
  • 因为您可能希望通过 Web 服务发送一些任意二进制数据。我有一些错误报告代码,它调用 Web 服务来报告错误,并且(可选)发送应用程序当时正在处理的二进制文件。让调试我的用户崩溃变得更加容易。

标签: xml null cdata


【解决方案1】:

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

【讨论】:

    【解决方案2】:

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

    Why are "control" characters illegal in XML 1.0?

    【讨论】:

      【解决方案3】:

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

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

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

      Base64?

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

      【讨论】:

      • 另一方面,如果您需要在 XML 文档中存储大量二进制数据,则可以使用 base 64 编码。
      猜你喜欢
      • 1970-01-01
      • 2013-01-17
      • 2010-12-25
      • 2021-07-14
      • 2020-09-07
      • 1970-01-01
      • 2014-08-06
      • 1970-01-01
      • 2018-08-27
      相关资源
      最近更新 更多