我有一个应用程序(像许多其他人一样)接收用户输入,将其存储在数据库中,然后使用(其中包括)XML工具处理它.应用程序接受自由文本输入,像许多其他开发人员一样,我非常小心转义和引用,因此它可以处理包含不同类型的空格,引号字符,保留XML字符等的输入.
但是,有时用户将设法输入包含垂直制表符(十六进制0B)或换页(十六进制0C)的字符串.这根本不能由XML工具处理,导致应用程序被禁止.
在我的应用程序中,在"往返"过程中保留原始输入非常重要,所以我不愿意删除任何我不喜欢的字符,特别是像纯文本文件中偶尔使用的换页符之类的东西.
在涉及XML处理时,是否有任何可接受的最佳实践或一般策略来处理这些字符?
是的,不幸的是,某些字符在 XML 中是非法的,并且没有等效的实体。作为这些示例之一,请参阅:
http://www.jdom.org/docs/apidocs.1.1/org/jdom/Element.html#setText(java.lang.String)
Run Code Online (Sandbox Code Playgroud)
这是一个字符串设置器...可以抛出异常!垂直制表符正是那些没有 XML 实体的字符之一,也没有单独使用 XML 来“转义”它的方法。
我自己正在解决这个问题,方法是使用 base64 编码来清理可能包含这些字符的字符串。这有点傻,因为我必须一直进行 Base64 编码和解码,但我认为没有一个好的替代方案。
Vin*_*ent -4
�
您应该使用 amperstand (通过)转义它们�x1F
,然后在最后解码/恢复它们。