处理垂直制表符和其他无效xml字符的最佳实践

处理垂直制表符和其他无效xml字符的最佳实践,xml,text,Xml,Text,我有一个应用程序,它(和其他许多应用程序一样)接收用户输入,将其存储在数据库中,然后使用(除其他外)XML工具对其进行处理。该应用程序接受自由文本输入,与许多其他开发人员一样,我非常小心地转义和引用,以便它可以处理包含不同类型的空格、引号字符、保留XML字符等的输入 但是,有时用户会设法输入包含垂直制表符(十六进制0B)或表单提要(十六进制0C)的字符串。这完全不能由XML工具处理,并导致应用程序呕吐 在我的应用程序中,在“往返”过程中保留原始输入是非常重要的,因此我不愿意去掉任何我不喜欢的字符

我有一个应用程序,它(和其他许多应用程序一样)接收用户输入,将其存储在数据库中,然后使用(除其他外)XML工具对其进行处理。该应用程序接受自由文本输入,与许多其他开发人员一样,我非常小心地转义和引用,以便它可以处理包含不同类型的空格、引号字符、保留XML字符等的输入

但是,有时用户会设法输入包含垂直制表符(十六进制0B)或表单提要(十六进制0C)的字符串。这完全不能由XML工具处理,并导致应用程序呕吐

在我的应用程序中,在“往返”过程中保留原始输入是非常重要的,因此我不愿意去掉任何我不喜欢的字符,特别是像表单提要这样的东西,它们仍然偶尔在纯文本文件中使用


当涉及XML处理时,是否有任何公认的最佳实践或一般策略来处理这些字符?

您应该使用amperstand(
&0;
&0x1F
)对它们进行转义,然后在最后对它们进行解码/恢复


请参见

是,不幸的是,某些字符在XML中是非法的,并且没有等效的实体。作为这些示例之一,请参见:

http://www.jdom.org/docs/apidocs.1.1/org/jdom/Element.html#setText(java.lang.String)
这是一个字符串设置器。。。这会引发异常!垂直制表符正是其中一个没有XML实体的字符,也不是仅用XML“转义”它的方法


我正在通过使用base64编码清理可能包含这些字符的字符串来解决这个问题。这有点傻,因为我必须一直进行base64编码和解码,但我认为没有好的替代方案。

那么这个问题就没有意义了。如果要求在XML中放入特殊的无效字符(这可能是多么的无效),则转义仍将允许处理文件,而使用无效字符的边缘情况必须由应用程序本身处理。也可以使用CDATA或任何其他格式。事实上,这个问题毫无意义。这是另一种情况,要求开发人员弥补发送数据的人不理解XML的事实。@Vincent有些字符在XML文档中是不允许的,即使它们作为实体转义。OP提到了两个这样的人物<代码> 不是有效的XML。