XML 和 Internet 支持特殊字符

博客介绍了XML和Internet中特殊字符的编码问题。在URL执行查询时,特殊字符需按%xx格式编码;在XML的SQL或XPath查询中,特殊字符要进行实体编码。有时还需同时指定URL编码与实体编码,如URL中实体编码内的&字符需进一步编码。

XML Internet 支持特殊字符

一些字符在 URL XML 文档中使用时有特殊的含义,因此必须针对这些含义对字符做适当编码以使其生效。

URL 中的特殊字符

URL 上执行的查询中,特殊字符被指定为 %xx,其中 xx 是字符的十六进制值。下表列出了这些特殊字符并描述了它们的含义。有关更多信息,请参见 http://www.faqs.org/rfcs/rfc1738.html 中的 RFC1738 规范。

特殊字符


特殊含义

十六进制值

+

表示空格(在 URL 中不能使用空格)。

%2B

/

分隔目录和子目录。

% 2F

?

分隔实际的 URL 和参数。

% 3F

%

指定特殊字符。

%25

#

表示书签。

%23

&

URL 中指定的参数间的分隔符。

%26

 

例如,考察下面的查询:

SELECT *

FROM Employees

WHERE EmployeeID=?

因为 ? 字符在 URL 中有特殊含义(分隔 URL 和传递的参数),所以在 URL 中指定该查询时,该字符被编码为 % 3F

下列 URL 将执行该查询。在 URL 中传递该参数值。有关用 HTTP 执行 SQL 语句的更多信息,请参见使用 HTTP SQL 语句

http://IISServer/nwind?sql=SELECT * FROM Employees WHERE EmployeeID=% 3F FOR XML AUTO&root=root&EmployeeID=1

浏览器将 ? 右侧的所有特殊字符(如 + 字符)都进行转义(即,将 ? 右侧的 + 字符转换成 %20)。

XML 中的特殊字符

> < 这类字符是XML 标记字符,在 XML 中有特殊的含义。当在 SQL 查询(或 XPath 查询)中指定这些字符时,必须对它们进行适当的编码(也称为实体编码)。下表列出了这些特殊字符并描述了它们的含义。有关更多信息,请参见 XML 1.0 规范 中的 XML 1.0 规范。

特殊字符

特殊含义

实体编码

>  

开始标记。

&gt;

<  

结束标记。

&lt;

"

引号。

&quot;

'

撇号。

&apos;

&

"&"符。

&amp;

 

例如,考察下面的查询:

SELECT  TOP 2 *

FROM    [Order Details]

WHERE   UnitPrice < 10

FOR XML AUTO

因为 < 字符在 XML 中有特殊含义,所以当在某模板(一个 XML 文档)中指定该查询时,必须将该字符编码为 &gt;。以下就是含有该查询的模板:

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">

  <sql:query>

      SELECT top 2 *

      FROM     [Order Details]

      WHERE     UnitPrice &lt; 10

      FOR XML AUTO

  </sql:query>

</ROOT>

有关模板的更多信息,请参见使用模板执行 SQL 查询使用模板执行 XPath 查询

URL 编码中的实体编码

有时可能需要同时指定 URL 编码与实体编码。例如,可在 URL 中直接指定以下模板(而不是指定文件名):

<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql">

  <sql:query>

      SELECT top 2 *

      FROM     [Order Details]

      WHERE     UnitPrice &lt; 10

      FOR XML AUTO

  </sql:query>

</ROOT>

在此例中,(为 < 标记字符指定的)实体编码 &lt; 内的 & 字符在 URL 中有特殊含义,需要对其进行进一步编码。必须将 & 字符编码为 %26,否则在 URL 中将把它视为参数分隔符。该 URL 于是被指定为:

http://IISServer/nwind?template=<ROOT xmlns:sql="urn:schemas-microsoft-com:xml-sql"><sql:query>SELECT TOP 2 * FROM [Order Details] WHERE UnitPrice %26lt; 10 FOR XML AUTO</sql:query></ROOT>

请参见

使用 HTTP 访问 SQL Server

使用 FOR XML 检索 XML 文档

使用用于 SQL Server IIS 虚拟目录管理实用工具

 

 

评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值