gpt4 book ai didi

xml - 在 <![CDATA[ block 中处理 "<![CDATA["的首选方式是什么?

转载 作者:数据小太阳 更新时间:2023-10-29 02:16:41 30 4
gpt4 key购买 nike

<![CDATA[]]>不允许在 <![CDATA[ … ]]> 内堵塞。这是可以理解的。

现在,我必须在 <![CDATA[ … ]]> 中传输用户输入的数据堵塞。恶意用户可能会输入 <![CDATA[]]>或两者兼而有之。

问题是:处理这种情况的首选方法是什么?

  • 剥离 <![CDATA[]]>
  • 用空格替换它?
  • 用错误消息打击用户?
  • 或者是否有实际传输它们的官方方式?

最佳答案

CDATA 部分在技术上可以包含另一个起始标记 -- <![CDATA[ -- 它只是被解释为字符数据。它不能包含的是 ]]> .通常的方法只是在 ]]> 处拆分 CDATA在编码时在用户提供的数据中。来自 Wikipedia :

A CDATA section cannot contain the string "]]>" and therefore it is not possible for a CDATA section to contain nested CDATA sections. The preferred approach to using CDATA sections for encoding text that contains the triad "]]>" is to use multiple CDATA sections by splitting each occurrence of the triad just before the ">". For example, to encode "]]>" one would write:

<![CDATA[]]]]><![CDATA[>]]>

This means that to encode "]]>" in the middle of a CDATA section, replace all occurrences of "]]>" with the following:

]]]]><![CDATA[>

This effectively stops and restarts the CDATA section.

[结束维基百科引用]

看到它在做什么了吗?实际上,您最终得到的是:

<![CDATA[ ]] ]]> 
<![CDATA[ > ]]>

(为强调而添加的空格。)因此,您得到了 ]]>编码为 ]]> 旁边-- 当您的 XML 处理器在解码过程中将它们组合在一起时,您将得到 ]]>。作为字符数据,而是一个 ]]>从未真正出现在您的 CDATA 部分中。

但是,在这个时代,您没有必要为此担心。无论您使用什么工具/库来创建 XML,都应该简单地为您管理它,如果您将字符数据放入 XML 的元素中,到字符数据的转换应该以 XML 库认为合适的方式自动完成,使用所有必要的转义,无需您考虑。

关注恶意用户数据是件好事,但在这种情况下处理它的最佳方法是正确使用成熟的库,其中有人已经为您关注过。

关于xml - 在 &lt;![CDATA[ block 中处理 "&lt;![CDATA["的首选方式是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6910361/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com