2010-08-04 68 views
0

有点不寻常的问题 - 在什么情况下尖括号用反斜杠逃脱?在什么情况下尖括号用反斜杠逃脱?

我发送一个XML文档(作为字符串xsd类型)通过一个Web服务,它将其保存到数据库,但在那里我看到所有XML的尖括号用反斜杠转义,所以我想知道究竟在哪里(Java XML使用DocumentBuilder和Transformer创建,Web服务堆栈,保存到数据库还是其他?)它会被转义?

实施例:

旨在XML:

<?xml version="1.0" encoding="UTF-8"?><Params><param name="qqq">1</param></Params> 

实际结果:

\<?xml versionenter code here="1.0" encoding="UTF-8"?\>\<Params\>\<param name="qqq"\>1\</param\>\</Params\> 

回答

1

左侧角支架应当被转义为实体& LT; (以及与& amp一样的任何&符号),这就是所有在XML上下文中转义的东西。

我遇到了尖括号在正则表达式的上下文中具有不同含义的情况,必须像您的问题中所示那样转义。但是没有符合标准的XML解析器会查看该字符串并说,是的,这非常好。因为它不是。那些反斜杠不应该在那里,除非我失去了一些东西。

2

在合法的HTML或XML中,左尖括号字符不会以这种方式转义。在这两种格式中,'<'字符被替换为"&lt;"。具体来说,我不会期望符合标准的XML构建器/序列化器或Web服务堆栈来执行此操作。

它们不会在URL中以这种方式转义。如果您足够疯狂以将XML嵌入到URL中,则可以使用"%xx"编码。

我不明白为什么DBMS需要这样做来存储它所存储的字符数据。

我可以想到在哪里使用'\'转义'<'的唯一常见情况是使用某些Wiki标记语言。

IMO,最可能的解释是,这是您正在使用的Web服务的一些特定于应用程序的funkiness。