xml – 首选句柄“<![CDATA [”在<![CDATA [块?

<![CDATA [and]]>不允许进入<![CDATA [...]]>块.这是可以理解的.

现在,我必须在<![CDATA [...]]>内传输用户输入的数据.块.恶意用户可能会输入<![CDATA [或]]>或两者.

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

>剥离<![CDATA [和]]>?
>用空格替换它?
>使用错误消息对用户进行扫描?
>或者是否有实际传输它们的官方方式?

最佳答案
我认为你正在以错误的方式思考CDATA部分–CDATA代表“字符数据”,CDATA语法只是一个不应被解释为标记的数据块的语法. CDATA部分对于将xml文档嵌入到另一个xml文档中非常有用,但是当在文档中包含字符数据(即文本)时,如果数据被封装在CDATA部分而不是简单地编码为文本数据,则不应该更改数据的含义. (可能某些角色逃脱了).

简短的版本是您的应用程序不应该关心数据是否编码为CDATA.如果您编码的文本不是过于沉重的类似xml的语法,那么你可能最好只是转义&和<字符 - 无论如何你的XML API可能会为你做的事情.例如,XmlNode的InnerText属性将根据需要转义字符.

如果您仍想使用CDATA标记(转义大型xml片段可能会过度膨胀生成的文档的大小),那么您只需要转义代码CDATA语法fragement(]]>),例如,这可以通过简单地完成替换]]> with]]]]><![CDATA [>.

转载注明原文:xml – 首选句柄“<![CDATA [”在<![CDATA [块? - 代码日志